Воскресенье, 19.05.2024, 17:20
Приветствую Вас Гость | RSS
delphicode.clan.su
Форма входа
Поиск
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
 
 ФАЙЛОВЫЕ ОПЕРАЦИИ
  
 

Дельфи предоставляет довольно широкие возможности по файловым операциям без использования механизмов открытия/закрытия файлов.

Вот список наиболее употребимых функций, большинство из которых в фачкстве параметров нуждаются только в имени файла:

ChDir(NewCurrentPath: string); - изменяет текущий каталог (в среде Windows сие конечно не так актуально как в ДОС, но все же), прочитать же текущий каталог можно функцией GetCurrentDir, а текущий каталог для определенного драйва - GetDir.

CreateDir(const Dir: string): Boolean; - создает каталог. При этом предыдущий уровень должен присутствовать. Если вы хотите сразу создать всю вложенность каталогов используйте функцию ForceDirectories(Dir: string): Boolean; Обе функции возвращают True если каталог создан

DiskFree(Drive: Byte): Int64; - дает свободное место на диске. Параметер - номер диска 0 = текущий, 1 = A, 2 = B, и так далее

DiskSize(Drive: Byte): Int64; - размер винта. Обратите внимание на то что для результата этой и предыдущей функций абсолютно необходимо использовать переменную типа Int64, иначе макимум того что вы сможете прочитать правильно будет ограничен 2Gb

FileExists(const FileName: string) - применяется для проверки наличия файла

FileGetAttr(const FileName: string): Integer; 
FileSetAttr(const FileName: string; Attr: Integer): Integer; - функции для работы с атрибутами файлов. Вот список возможных атрибутов:

  
 
faReadOnly $00000001 Read-only files
faHidden $00000002 Hidden files 
faSysFile $00000004 System files 
faVolumeID $00000008 Volume ID files 
faDirectory $00000010 Directory files 
faArchive $00000020 Archive files 
faAnyFile $0000003F Any file 
(Естественно не все атрибуты применимы во всех случаях)
  
 RemoveDir(const Dir: string): Boolean; - удаляет папку(пустую) 
DeleteFile(const FileName: string): Boolean; - удаляет файл 
RenameFile(const OldName, NewName: string) - переименовывает файл
  
 

Поиск файлов

  
 

Теперь поговорим о поиске файлов. Для этой цели могут использоваться процедуры FindFirst, FindNext, FindClose, при участии переменной типаTSearchRec которая хранит информацию о текущем статусе поиска и характеристики последнего найденного файла.

Пример иллюстрирующий поиск всех файлов и каталогов в определенном каталоге:

  
 
var 
SearchRec: TSearchRec; 
... if FindFirst('c:\Windows\*.*', faAnyFile, SearchRec) = 0 then 
repeat 
{Вот здесь мы можем делать с найденным файлом что угодно 
SearchRec.name - имя файла 
ExpandFileName(SearchRec.name) - имя файла с полным путем} 
until FindNext(SearchRec) <> 0; 
FindClose(SearchRec);
  
 

Примечания по приведенному коду:

  1. Первыми в список могут попадать файлы с именами "." и ".." - это ДОСовские имена для переходов на "родительский уровень", иногда нужна обработка для их игнорирования.
  2. FindFirst в качестве первого параметра принимает шаблон для поиска, так как он был принят для ДОС. Если шаблон не включает путь то файлы будут искаться в текущем каталоге.
  3. FindFirst требует задания атрибута для файла - здесь мы искали все файлы, если надо какие-то определенные (например только скрытые, или только каталоги) то надо это указать, список всех атрибутов я уже приводил выше.
  4. SearchRec переменная связывает во едино FindFirst и FindNext, но требует ресурсов для своей работы, поэтому желательно ее освободить после поиска процедурой FindClose(SearchRec) - на самом деле утечки памяти небольшие, но если программа работает в цикле и долгое время пожирание ресурсов будет значительным.
  5. FindFirst/FindNext - работают не открывая файлы, поэтому они корректно находят даже Swap файлы Windows...
 
Автор: Vit
WEB-сайт: http://forum.vingrad.ru