Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поиск папок, и получить список файлов 
V
    Опции темы
popapo
Дата 18.8.2009, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 80
Регистрация: 23.2.2008

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



Смысл - в папке "lang" найти все папки и потом найти в каждой папке *.dll

Смотрел справку по FindNext, но мне не понятно как ей пользоваться и получить список файлов


  
Код

TSearchRec sr;
  int iAttributes = 0;
  StringGrid1->RowCount = 1;
  iAttributes |= faReadOnly * CheckBox1->Checked;
  iAttributes |= faHidden * CheckBox2->Checked;
  iAttributes |= faSysFile * CheckBox3->Checked;
  iAttributes |= faVolumeID * CheckBox4->Checked;
  iAttributes |= faDirectory * CheckBox5->Checked;
  iAttributes |= faArchive * CheckBox6->Checked;
  iAttributes |= faAnyFile * CheckBox7->Checked;
  StringGrid1->RowCount = 0;
  if (FindFirst(Edit1->Text, iAttributes, sr) == 0)
  {
    do
    {
      if ((sr.Attr & iAttributes) == sr.Attr)
      {
        StringGrid1->RowCount = StringGrid1->RowCount + 1;
        StringGrid1->Cells[1][StringGrid1->RowCount-1] = sr.Name;
        StringGrid1->Cells[2][StringGrid1->RowCount-1] = IntToStr(sr.Size);
      }
    } while (FindNext(sr) == 0);
    FindClose(sr);
  }



Подскажите пожалуста пример.

Это сообщение отредактировал(а) popapo - 18.8.2009, 13:15
PM   Вверх
Anikmar
Дата 18.8.2009, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

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



Кусок рабочего кода, лишнее поубирайте, смысл думаю, понятен
Код

//---------------------------------------------------------------------------
/*
    Создает список из элементов каталога в поле Root и маской *.*
    Для каждого каталога из списка вызывает аналогичную функцию
    pProcess - Объект индикатора процесса
*/
void TMAN_DirectoryItemList::Reload(TMAN_ProgressStatObject *pProcess)
{
    TSearchRec sr;
    int iAttributes = 0;
    int Count;
    TMAN_DirectoryItem *NewItem;

    iAttributes |= faReadOnly;
    iAttributes |= faHidden;
    iAttributes |= faSysFile;
    iAttributes |= faDirectory;
    iAttributes |= faArchive;
    iAttributes |= faAnyFile;

    Clear();
    Application->ProcessMessages();
    Count = 0;
    if (FindFirst(Root+ "*.*", iAttributes, sr) == 0)
    {
        do
        {
            if (pProcess!= NULL)
            {
                if (pProcess->IsStop())
                {
                    Clear();
                    break;
                }
            }
            if (Count++ > 1000)
            {
                // Для исключения подвисания прогресса на больших списках файлов
                Application->ProcessMessages();
                Count = 1000;
            }
            if (sr.Attr & faDirectory)
            {
                if ((sr.Name == ".")||(sr.Name == "..")) continue;
                // Добавляем каталог
                NewItem = new TMAN_DirectoryItem(this,Root);
                NewItem->Name = sr.Name;
                NewItem->Type = 10;
                NewItem->Reload(pProcess);
                ColvoFolders++;
                TotalColvoFolders++;
                TotalColvoFiles+=NewItem->ColvoFiles;
                TotalColvoFolders+=NewItem->ColvoFolders;
                TotalSize+=NewItem->Size;
                if (pProcess!= NULL)
                {
                    pProcess->IncFolder(1);
                    pProcess->IncFilesSize(sr.Size);
                }
            }
            else
            {
                // Добавляем файл
                NewItem = new TMAN_DirectoryItem(this,Root);
                NewItem->Name = sr.Name;
                NewItem->Type = 20;
                NewItem->Size = sr.Size;
                ColvoFiles++;
                TotalColvoFiles++;
                Size+=sr.Size;
                TotalSize+=sr.Size;
                if (pProcess!= NULL)
                {
                    pProcess->IncFile(1);
                    pProcess->IncFilesSize(sr.Size);
                }
            }
            pvItems->Add(NewItem);
        } while (FindNext(sr) == 0);
        FindClose(sr);
    }
}


PM MAIL ICQ   Вверх
popapo
Дата 19.8.2009, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 80
Регистрация: 23.2.2008

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



А можно попроще,
if (sr.Attr & faDirectory) - это если найдена директория?
А нельзя потом просто найденую директорию записать в String без каких либо сложных манипуляций.  smile 
PM   Вверх
Anikmar
Дата 19.8.2009, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

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



Цитата(popapo @  19.8.2009,  13:21 Найти цитируемый пост)
if (sr.Attr & faDirectory) - это если найдена директория?

Именно


Цитата(popapo @  19.8.2009,  13:21 Найти цитируемый пост)
А нельзя потом просто найденую директорию записать в String без каких либо сложных манипуляций.

Я выдрал пример из моего рабочего класса - построение дерева каталогов по всему диску.
Естественно после того как определено, что осередная запись это директория со структурой TSearchRec можно делать все что в душе угодно - записать ее в массив и т.п.

Если убрать из моего примера все лишнее то останется что-то такое:
Код


void Reload(void)
{
    TSearchRec sr;
    int iAttributes = 0;

    iAttributes |= faReadOnly;
    iAttributes |= faHidden;
    iAttributes |= faSysFile;
    iAttributes |= faDirectory;
    iAttributes |= faArchive;
    iAttributes |= faAnyFile;

    if (FindFirst("c:\\*.*", iAttributes, sr) == 0)
    {
        do
        {
            if (sr.Attr & faDirectory)
            {
//              Найдена директория
                if ((sr.Name == ".")||(sr.Name == "..")) continue;  // Обычно эти директории не нужны
                // Делаем с ней то что нам нужно - в структуре sr все ее данные
            }
            else
            {
                // Найден файл - делаем с ним то что нужно (в структуре sr данные файла)

            }
        } while (FindNext(sr) == 0);
        FindClose(sr);
    }
}

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


Шустрый
*


Профиль
Группа: Участник
Сообщений: 80
Регистрация: 23.2.2008

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



Спасибо большое! все работает.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

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

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

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

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


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

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


 




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


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

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