Поиск:

Ответ в темуСоздание новой темы Создание опроса
> листинг файлов 
:(
    Опции темы
Grom
Дата 5.12.2006, 01:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 17.8.2006
Где: Москва

Репутация: 1
Всего: 1



как сделать листнг всех файлов и файлов в подпапках ?
нашёл только листнг файлов и папок, но переделать под себя никак не могу. Вот что сделал - вроде верно, но все равно делается только листинг файлов и папок.

Код

void pars (AnsiString a)
{
AnsiString  vasFilename,    //имя файла
            vasFileMask,    //маска файла
            vasCurDir;      //текущая директория
 //TSearchRec информация о файле
 TSearchRec tFileInfo;
 //Определяем каталог


 vasCurDir=a;

 //Если корневая директория  удаляем слэш
 if(vasCurDir.Length() == 3)
  vasCurDir=vasCurDir.Delete(3,1);
 //Задаем маску
 vasFileMask="*.*";
 //Определяем имя файла
 vasFilename=vasCurDir+"\\"+vasFileMask;
 //Сюда выведем список файлов
 //Form1->Memo1->Lines->Clear();
 if(FindFirst(vasFilename,faAnyFile,tFileInfo) == 0)
 {
  while(1)
  {
   //Исключаем корневую
   if((tFileInfo.Name != ".")&(tFileInfo.Name != ".."))

    //Фильтруем каталоги в Memo2 а файлы в Memo1
    if(tFileInfo.Size != 0 )
     Form1->Memo1->Lines->Add(tFileInfo.Name);
    else
    {
    Form1->Memo2->Clear();
     Form1->Memo2->Lines->Add(tFileInfo.Name);
     AnsiString str;
     int co;
   co=Form1->Memo2->Text.Length();

   str=Form1->Memo2->Text;
    str=str.SubString(0,co-2);
     ShowMessage(str);
     pars(str); //рекурсивный вызов функции

    }
   if(FindNext(tFileInfo) != 0)
    break;

  }
 }
}


void __fastcall TForm1::Button1Click(TObject *Sender)
{
char a[256];
GetWindowsDirectory(a,sizeof(a));
pars(a);
}


Вот там где рекурсивный вызов по моей идее как только нашлась папка в ней должна запуститься функция pars и потом вернуться на прошлую папку.. и тд.. но почему-то так не делается  smile 

Это сообщение отредактировал(а) Grom - 5.12.2006, 01:40
--------------------
Хостинг, Vds, Dedicated serve, регистрация доменов (RU,com,net,org) - обращаться в icq.
PM MAIL   Вверх
codelord
Дата 5.12.2006, 05:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 777
Регистрация: 7.5.2005
Где: ты моя темноглаза я где?!

Репутация: 16
Всего: 39



Вот пример реализации Drag&Drop, там директория раскладывается до последнего файла:

Присоединённый файл ( Кол-во скачиваний: 15 )
Присоединённый файл  drop.zip 15,34 Kb


--------------------
Доступен поиск по исходным кодам в GOOGLE.
http://www.google.com/codesearch
PM MAIL   Вверх
Grom
Дата 5.12.2006, 18:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 17.8.2006
Где: Москва

Репутация: 1
Всего: 1



codelord, спасибо большое... буду разбираться.
--------------------
Хостинг, Vds, Dedicated serve, регистрация доменов (RU,com,net,org) - обращаться в icq.
PM MAIL   Вверх
Akeem
Дата 5.12.2006, 22:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 14.7.2006
Где: Киев/Украина

Репутация: 1
Всего: 3



Вот ещё реализация консольного приложения листинга файлов в директории.

Код


#include <fstream>
#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <dir.h>
#include <dos.h>
#include <string>
 #include <algorithm>
 #include <functional>

using namespace std;

int main()
{

    ffblk MyStruct;
    char *DirName;
    string FileName;
    int done;
    cout<<"Enter directory "<<endl;
    cin>>DirName;
    printf("List directory %s\n",DirName);
    done = findfirst(DirName,&MyStruct,0);
    while (!done)
    {
        FileName = MyStruct.ff_name;
        
                    printf(" %s\n", FileName);

        done = findnext(&MyStruct);
    }
    getch();
    return 0;
}


Это как бы костяк. А ты уже думаю сам допишешь что куда надо.


--------------------
Мир огромен и мы только муравьи в нём! (С) formicha

PM MAIL WWW ICQ   Вверх
Grom
Дата 6.12.2006, 22:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 17.8.2006
Где: Москва

Репутация: 1
Всего: 1



codelord, блин не получается разобраться что-то... smile ничего не понятно.

Akeem, вообще с ошибкой.. не компилит.
--------------------
Хостинг, Vds, Dedicated serve, регистрация доменов (RU,com,net,org) - обращаться в icq.
PM MAIL   Вверх
Grom
Дата 6.12.2006, 23:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 17.8.2006
Где: Москва

Репутация: 1
Всего: 1



вот нашёл такой пример, переписывал его с делфи, но 2 ошибки не могу исправить

Код

void GetAllFiles (AnsiString Path, TListBox Lb)
{
TSearchRec  sRec;
boolean  isFound;

   isFound = FindFirst( Path + "\*.*", faAnyFile, sRec ) == 0;
   while (isFound)
   {
      if ( (sRec.Name != "." ) && ( sRec.Name != "..") )
      {
         if (( sRec.Attr) && (faDirectory) == faDirectory)
            GetAllFiles( Path + "\\" + sRec.Name, Lb ); //первая ошибка
         Lb.Items->Add( Path + "\\" + sRec.Name );
      }
      //Application->ProcessMessages;
      isFound = FindNext( sRec ) == 0;
   }
   FindClose( sRec );
}


//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
GetAllFiles( "c:\\", ListBox1 ) ; //вторая
}


и там и там говори: VCL style classes must be constructed using operator new

как исправить - я так и не понял. помогите  smile 
--------------------
Хостинг, Vds, Dedicated serve, регистрация доменов (RU,com,net,org) - обращаться в icq.
PM MAIL   Вверх
codelord
Дата 7.12.2006, 00:37 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 777
Регистрация: 7.5.2005
Где: ты моя темноглаза я где?!

Репутация: 16
Всего: 39



Код

void GetAllFiles (AnsiString Path,TListBox *Lb)
{
TSearchRec  sRec;
boolean  isFound;

   isFound = FindFirst( Path + "\*.*", faAnyFile, sRec ) == 0;
   while (isFound)
   {
      if ( (sRec.Name != "." ) && ( sRec.Name != "..") )
      {
         if (( sRec.Attr) && (faDirectory) == faDirectory)
            GetAllFiles( Path + "\\" + sRec.Name, Lb ); //
         Lb->Items->Add( Path + "\\" + sRec.Name );
      }
      //Application->ProcessMessages;
      isFound = FindNext( sRec ) == 0;
   }
   FindClose( sRec );
}

void __fastcall TForm1::Button2Click(TObject *Sender)
{
  TListBox *ListBox1 = new TListBox(this);
  ListBox1->Parent=this;
  ListBox1->Top=0;
  ListBox1->Left=0;
  ListBox1->Height=300;
  ListBox1->Width=300;
  GetAllFiles( "c:\\", ListBox1 ) ; //
}



--------------------
Доступен поиск по исходным кодам в GOOGLE.
http://www.google.com/codesearch
PM MAIL   Вверх
Grom
Дата 7.12.2006, 01:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 17.8.2006
Где: Москва

Репутация: 1
Всего: 1



codelord, огромное спасибо! то что надо  smile 
а вот ещё там Application->ProcessMessages; 

я поставил там &Application->ProcessMessages; но программа всё равно подвисает если собирать листинг по папке с виндой. что можно придумать ?
--------------------
Хостинг, Vds, Dedicated serve, регистрация доменов (RU,com,net,org) - обращаться в icq.
PM MAIL   Вверх
codelord
Дата 7.12.2006, 05:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 777
Регистрация: 7.5.2005
Где: ты моя темноглаза я где?!

Репутация: 16
Всего: 39



так будет несколько шустрей
Код

void __fastcall TForm1::Button1Click(TObject *Sender)
{
  TListBox *ListBox1 = new TListBox(this);
  ListBox1->Parent=this;
  ListBox1->Top=0;
  ListBox1->Left=0;
  ListBox1->Height=300;
  ListBox1->Width=300;
  ListBox1->Items->BeginUpdate();
  GetAllFiles( "c:\\windows\\", ListBox1 ) ; 
  ListBox1->Items->EndUpdate();
}


Добавлено @ 05:48 
Цитата(Grom @  6.12.2006,  21:37 Найти цитируемый пост)
я поставил там &Application->ProcessMessages;

поставь: 
Код

Application->ProcessMessages();

а то толку от такой записи нет smile



--------------------
Доступен поиск по исходным кодам в GOOGLE.
http://www.google.com/codesearch
PM MAIL   Вверх
Grom
Дата 7.12.2006, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 17.8.2006
Где: Москва

Репутация: 1
Всего: 1



codelord, блин спасибо, не досмотрел. респект  smile 
--------------------
Хостинг, Vds, Dedicated serve, регистрация доменов (RU,com,net,org) - обращаться в icq.
PM MAIL   Вверх
Akeem
Дата 7.12.2006, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 14.7.2006
Где: Киев/Украина

Репутация: 1
Всего: 3



Grom, 
Не знаю почему у тебя выдает ошибку у меня работало и прекрасно.


--------------------
Мир огромен и мы только муравьи в нём! (С) formicha

PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0495 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.