Определение перечня файлов в каталогах
Использование компонент 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;
}
}
}
|