Определение перечня файлов в каталогах
Использование компонент TDriveComboBox, TDirectoryListBox, TFileListBoxПоместим на форму компоненты TDriveComboBox, TDirectoryListBox, TFileListBox и свяжем их:
Теперь можно вибирать диск и дирректорию и в 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; } } } |