Определение перечня файлов в каталогах

В начало

Использование компонент TDriveComboBox, TDirectoryListBox, TFileListBox

Поместим на форму компоненты TDriveComboBox, TDirectoryListBox, TFileListBox и свяжем их:

  • Свойство DirList TDriveComboBox1 установим в DirectoryListBox1;

  • Свойство FileList DirectoryListBox1 установим в FileListBox1.

Теперь можно вибирать диск и дирректорию и в FileListBox1 видеть список файлов в выбранной директории. Имя директории можно отобразить в элементе Label, поместив его на форме и установив свойство DirLabel в Label1 или непосредственно из свойства Directory компонента TDirectoryListBox:

DirectoryListBox1->Directory;

Имена файлов можно отобразить в компоненте TMemo следующим образом:

Memo1->Lines->Clear();
for(int i=0; i < FileListBox1->Count; i++)
  Memo1->Lines->Add(FileListBox1->Items->Strings[i]);

Или тоже но с отображением полного пути файла:

Memo1->Lines->Clear();
for(int i=0; i < FileListBox1->Count; i++)
  Memo1->Lines->Add(
    DirectoryListBox1->Directory+"\\"+
     FileListBox1->Items->Strings[i]);

Группу выделенных файлов можно скопировать в потомки класса TCustomListControl.

 
FileListBox1->CopySelection(ListBox1);

Если разрешён MultiSelect, то всеже можно запретить пользователю выбирать некоторые имена файлов.

void __fastcall 
TForm1::FileListBox1Change(TObject *Sender)
{
 if(ExtractFileExt(FileListBox1->FileName) == ".doc"
  || ExtractFileExt(FileListBox1->FileName) == ".DOC") 
 {
  ShowMessage("Нельзя открывать файлы .DOC, .doc");
  FileListBox1->Update();
 }
}

В начало

Использование функций FindFirst, FindNext для создания списка файлов

Функции WinApi FindFirst() и FindNext() с успехом могут использоваться не только для получения информации о файлах (об этом более подробно в следующем параграфе), но и для создания списка файлов в директориях и выборке из директорий файлов определенных некоторым шаблоном. Здесь приводится лишь пример использования функций для создается списка файлов в директории.

void __fastcall
TForm1::Button1Click(TObject *Sender)
{
 AnsiString vasFilename,    //имя файла
            vasFileMask,    //маска файла
            vasCurDir;      //текущая директория
 //TSearchRec информация о файле
 TSearchRec tFileInfo;
 //Определяем каталог
 vasCurDir=GetCurrentDir();
 //Если корневая директория  удаляем слэш
 if(vasCurDir.Length() == 3)
  vasCurDir=vasCurDir.Delete(3,1);
 //Задаем маску
 vasFileMask="*.*";
 //Определяем имя файла
 vasFilename=vasCurDir+"\\"+vasFileMask;
 //Сюда выведем список файлов
 Memo1->Lines->Clear();
 if(FindFirst(vasFilename,faAnyFile,tFileInfo) == 0)
 {
  while(1)
  {
   //Исключаем корневую
   if((tFileInfo.Name != ".")&(tFileInfo.Name != ".."))
    //Исключаем каталоги
    if(tFileInfo.Size != 0 )
     Memo1->Lines->Add(tFileInfo.Name);
   if(FindNext(tFileInfo) != 0)
    break;

  }
 }
}

В начало

На главную подраздела

Домой