FindNext — Функция Delphi

FindNext — Функция Delphi

Ниже описываются Delphi функции для работы с файлами. В таблице содержатся практически все Delphi функции для работы с файлами, как создающие, переименовывающие, удаляющие файлы и каталоги, так и Delphi функции поиска файлов, обладающих заданными характеристиками.

procedure AssignFile Связывает файловую переменную F с именем файла FileName.
procedure ChDir Изменяет текущий каталог. Path — переменная, задающая путь к устанавливаемой по умолчанию папке.
procedure CloseFile Закрывает файл, однако связь файловой переменной с именем файла, установленная ранее процедурой AssignFile сохраняется. Функции процедуры CloseFile на системном уровне выполняются автоматически по отношению ко всем открытым файлам при нормальном завершении программы. Если после применения процедуры CloseFile файл нужно открыть повторно, процедуру AssignFile можно не применять, так как связь файловой переменной с файлом не разрывается.
function DateTimeToFileDate Преобразует значение переменной DateTime типа TDateTime Delphi в системный формат времени создания (обновления) файла.
function FileDateToDateTime Преобразует системный формат времени создания (обновления) файла в формат TDateTime Delphi.
function DiskFree Возвращает объём в байтах свободного пространства на указанном диске. Переменная D — номер диска (0 — устройство по умолчанию, текущий диск; 1 — диск А; 2 — диск B; 3 — диск С и т.д.). Функция возвращает значение -1, если указан номер несуществующего диска.
function DiskSpace Возвращает объём в байтах полного пространства на указанном диске. Переменная D — номер диска (0 — устройство по умолчанию, текущий диск; 1 — диск А; 2 — диск B; 3 — диск С и т.д.). Функция возвращает значение -1, если указан номер несуществующего диска.
function EOF Тестирует конец файла и возвращает True, если файловый указатель стоит в конце файла. При записи это означает, что очередной компонент будет добавлен в конец файла, при чтении — что файл исчерпан.
procedure Erase Уничтожает файл F. Перед выполнением процедуры файл должен быть закрыт процедурой CloseFile.
function FileAge Для файла FileName возвращает время его последнего обновления (в системном формате) или -1, если такого файла не существует.
function FileExists Возвращает True, если файл FileName существует, и False в противном случае.
function FileGetDate По заданному дескриптору файла Handle возвращает время и дату его создания (в системном формате). Если дескриптор не существует, возвращает -1.
function FileSetDate Возвращает в переменной F типа TSearchRec первый из файлов, зарегистрированных в указанном каталоге. Path: путь поиска с маской выбора файлов; Attr: атрибуты выбираемых файлов.
function FindNext (var F: TSearchRec): Integer; Возвращает в переменной F следующий файл в каталоге. Переменная F должна быть предварительно инициирована обращением к функции FindFirst.
procedure FindClose Освобождает память, выделенную для поиска файлов функциями FindNext и FindFirst.
procedure Flush(var F); Очищает внутренний буфер файла, гарантируя тем самым сохранность всех последних изменений файла на диске.
procedure GetDir (D: Byte; var S: String); Возвращает текущий каталог (каталог по умлочанию). D — номер устройства (0: устройство по умолчанию, 1 — диск А, 2 — диск В и т.д.); S — переменная типа String, в которой возвращается путь к текущему каталогу на указанном диске.
procedure MkDir (Dir: String); Создаёт новый каталог на текущем диске. Dir — адрес нового каталога, который не может совпадать с именем уже существующего каталога.
procedure Rename (var F; NewName: String); Переименовывает, т.е. задаёт новые адрес и имя файла F.
NewName — строковое выражение, содержащее новые адрес и имя файла. Перед выполнением процедуры необходимо закрыть файл.
procedure Reset (var F: File[; RecSize: Word]); Открывает существующий файл. Переменная RecSize имеет смысл только для нетипизированных файлов и указывает размер блока данных.
procedure Rewrite (var F: File[; RecSize: Word]); Создаёт новый файл. Переменная RecSize имеет смысл только для нетипизированных файлов и указывает размер блока данных.
procedure RmDir (Dir: String); Удаляет каталог Dir. Удаляемый каталог должен быть пустым, т.е. не содержать файлов или вложенных каталогов.
function CopyFile (OldName, NewName: AnsiChar; FileExists: Boolean): Boolean; Копирует файл. Эта функция — не встроенная функция Delphi, а одна из API функций ОС Windows. Возможность работать с ними программа получает после добавления в секцию uses модуля Windows. Параметры функции:
OldName — прежние адрес и имя файла;
NewName — новые адрес и имя файла;
FileExists — переменная, определяющая реакцию на существование файла по новому адресу. При FileExists=False файл будет перезаписан. При FileExists=True функция завершится ошибкой.
function GetLogicalDrives: Cardinal; Эта функция — также из состава WinAPI функций. Как и следует из её названия, позволяет получить структуру логических дисков компьютера. Пример её использования смотрите в комментариях к предыдущей страничке, в ответе на вопрос «как определить состав дисков компьютера»

Работа с файлами В начало урока Работа с дополнительными формами

Одиссей, добавлено 20.08.10, 11:03:29
В таблице отсутствуют функции для записи и чтения файлов! А в остальном очень полезный материал, практически можно научиться работать с файлами, изучив данную таблицу. Автор, добавлено 20.08.10, 11:06:54
В этой таблице содержатся функции управления файлами, а функции записи и чтения можно изучить, читая соответствующие уроки, посвящённые данным вопросам. А эта страничка даже не урок, а просто справочный материал. Вадим Мошев, добавлено 9.04.12, 15:31:27
Здравствуйте. У вас, наверное, описка?
Написано function Erase (var F);
и описание: Уничтожает файл F. Перед выполнением процедуры файл должен быть закрыт процедурой CloseFile.

Наверное, вы хотели написать не function, а Procedure?
То есть, Procedure Erase (var F). Андрей, добавлено 9.04.12, 15:54:27
Вадим, спасибо за внимательность! Сейчас исправлю.

Delphi, возвращаемая ошибка FindNext 18 даже есть папка

приветствия из Исландии!

Начнем с того, что я искал оба с google и здесь без результата.

Я пишу в Delphi и имею многолетний опыт работы в Delphi (более 30 лет в Pascal).

В течение этих лет я создал множество программных программ для файлов и использовал функции FindFirst и FindNext почти в каждом таком приложении. Сегодня я использовал старую файловую программу, которую я написал, и выяснил, что она не работает на 100%

Это было нормально, пока имя каталога не стало каким-то странным, т.е. имя с несколькими периодами внутри. История заключается в том, что я устанавливаю Wamp и некоторые папки, которые были названы с этим странным методом.

Когда я отлаживал, я обнаружил, что Findnext только что вернул ошибку 18, которая является той же ошибкой, что и FindNext, когда больше файлов не найти.

Я попробовал FindFirstFile и FindNextFile с тем же результатом. Я думаю попробовать API FindNextFileEx, если это связано с длинными именами файлов, но не так оптимистично..

Также я заметил, что атрибут в этих папках не был 16 (hex10), а был 8208 (8192 + 16), но он не имеет ничего общего с этой проблемой, поскольку я мог бы, например, маскировать (AND) attr с $00FF и т.д.

Используемый вами шаблон ( ‘\*.’ ) соответствует именам файлов и каталогов без периода в нем (что также означает отсутствие расширения для файлов). Попробуйте:

Чтобы немного расширить, функции VCL» Найти.. «- это обертки вокруг базовых функций API» Найти.. «, которые не заботятся о том, хотите ли вы искать файлы или папки (» Attr», параметр, который вы можете передать на sysutils.FindFirst , является средством, предоставляемым VCL, и VCL может влиять только на результат поиска, фильтруя его). Таким образом, результат использования шаблона ‘ *. не будет отличаться для файла или папки. Если шаблон не может вернуть имя файла с периодом в нем, он также не сможет вернуть папку с периодом в ней.

Использование параметра одинаково с командой dir . Перейдите в папку «..\apps» из командной строки, и если вы выберете >dir *. , вы не увидите папки в указанном вами вопросе.

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

FindNext — Функция Delphi

В этом уроке мы с вами ознакомимся с основными принципами программной организации поиска файлов. Для начала определимся, зачем нам это может быть нужно. Например, вам нужно при запуске программы на выполнение просканировать определенный каталог на присутствие DOC файлов, и при наличии таковых открыть их на редактирование или напечатать. А как вам такая идея: фоновый поиск EXE файла в сети, и при обнаружении новой версии, автоматическое обновление.

Многим известны программы, где можно искать файлы, правила поиска файла. Файлы можно искать как с файловых командирах (нортон, волков, дос навигатор, фар), так в любой операционной системе. В операционной системе windows диалоговое окно поиска файла вызывается «Пуск» — «Поиск» — «Файлы и папки». В открывшимся окне необходимо задать условие искомого файла (название, маска) и путь начального поиска (каталог). На других вкладках этого диалогового окна можно расширить возможности поиска по дате изменения, по содержащемуся тексту, по размеру.

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

  • Буквы и цифры в названии и расширении.
  • Символ * (звездочка, математический знак «умножить»), заменяющий любое количество всевозможных букв и цифр в названии или расширении.
  • Символ ? (знак вопроса), заменяющий одну букву или цифру в названии или расширении искомого элемента.

Например, вы ищите все текстовые файлы с расширением TXT. В поле имени искомого файла вам нужно ввести «*.TXT» (пишется без кавычек) и система найдет все такие файлы в указанном диске или каталоге. Если вам надо найти все файлы с названием semen, то в поле поиска файла нужно ввести «semen.*». Если вам нужно найти элементы с третьей буквой k и с первой буквой t в расширении, то вводите «??k*.t*». Здесь знак вопроса указывает на любой символ, третьим символом по порядку идет буква k, далее название файла (каталога) может состоять из любого количества букв и цифр, указываем звездочку. В расширении первая буква t, дальше следует любое расширение.

Примечание: файлы и каталоги в операционной системе windows ищутся без учета регистра, т.е. строчние и прописные буквы не различаются.

Теперь рассмотрим программный поиск файлов с помощью языка программирования object pascal.

Вся организация цикла поиска, а именно это и есть цикл с продолжением поиска, сводится к:

  • Задание условий поиска. Это каталог и маска искомого элемента или элементов, атрибуты элемента(ов). При задании условий поиска сразу происходит поиск первого подходящего под условие. Это функция FindFirst.
  • Продолжение поиска следующего элемента по заданным в первом пункте условиям. Это функция FindNext и она может вызываться сколько угодно раз, пока все файлы и каталоги, удовлетворяющие условию, не будут найдены.
  • Закрытие поиска и освобождение памяти, выделяемую системой под поиск. Команда FindClose.

где: Каталог для поиска и маска искомого элемента — строковая величина, имеющая тип String, может, например, содержать ‘c:\\*.*’ — все элементы в корне диска С. Обратите внимание, что указывается полный путь для поиска.

Атрибуты искомого элемента это пользовательские или системные атрибуты, которые может иметь файл (каталог, метка диска). Вот их перечень:

  • faReadOnly — Файлы «только чтение». Такой атрибут устанавливается на файлы, которые не рекомендовано изменять, удалять. Такой атрибут имеют файлы, например, записанные на компакт-дисках.
  • faHidden — Скрытые файлы. При обычных установках браузера и командира эти файлы невидимы.
  • faSysFile — Системные файлы.
  • faVolumeID — Файл метки диска. Такой элемент в своем имени имеет название диска (максимум 11 символов).
  • faDirectory — Атрибут признака каталога.
  • faArchive — Обычный файл. По умолчанию устанавливается на заново создаваемых файлах.
  • faAnyFile — Если установить в качестве атрибута искомых элементов, то будет произведен поиск по всем вышесказанным атрибутам.

Эти вам нужно искать только элементы, имеющие атрибут «каталог» и «скрытый», то можно применить знак математического сложения, например faDirectory + faHidden.

Поисковая переменная имеет тип TSearchRec. В нее, при успешном результате поиска, будет занесены все необходимые данные о найденном файловом элементе.

Поскольку FindFirst является функцией, то она должна сама возвращать некоторое значение. Это значение имеет тип Integer и означает результат поиска файла (код ошибки поиска). Если файл найден, то принимает нулевое значение.

Эта функция продолжает поиск, заданный в функции FindNext. Возвращает значение результата поиска (нулевое в случае успешного поиска).

Закрывает поиск и освобождает память, выделенную системой под поиск.

Теперь рассмотрим пример. Допустим, нам надо найти все файлы и каталоги в каталоге DELPHI, находящийся на диске C:. В дальнейшем, вы можете самостоятельно, изменяя маску, менять условия поиска. Для формы с компонентом ListBox1 и кнопкой Button1 реакция на OnClick по кнопке:

Представленный пример кода, в принципе, является основой для организации более углубленного поиска, поиска файлов по времени создания, по содержащимся словам. Если вы запустите эту программу на выполнение, то при нажатии на кнопку Button1 вы увидите в списке в первой и второй строке элементы «.» и «..». Это элементы, имеющие атрибут «каталог». Первый содержит связь с корневым каталогом диска, второй содержит связь к каталогом верхнего уровня. Со вторым вы встречаетесь в дисковых командных оболочках, например нортон, когда выбираете каталог «..» и нажимаете на «ввод». Тем самым вы попадаете в каталог на уровень выше. Естественно, в нашей поисковой программе такие элементы не надо вносить в список, поэтому мы игнорируем их нахождение. Исправляем процедуру нажатия на кнопку Button1:

В этом случае, при нахождении каталога с именем «.» или с именем «..» программа продолжит обработку цикла поиска без вывода найденного имени элемента в компонент списка ListBox1.

Теперь рассмотрим тип TSearchRec. Он имеет в себе несколько полезных свойств:

  • Name — название найденного каталога (файла);
  • Size — размер файла в байтах;
  • Attr — атрибуты каталога (файла);
  • Time — упакованное значение времени и даты создания каталога (файла).

Все вышеперечисленные свойства мы уже рассмотрели или они понятны сразу, за исключением свойства Time. Оно имеет тип Integer и содержит в себе упакованное значение даты и времени создания файла. Распаковка производится с помощью функции FileDateToDateTime, которая в результате возвращает значение даты и времени.

Теперь добавим в нашу форму компонент DateTimePicher1 (страница Win32) и допишем несколько строк.

Как вы уже заметили, мы отбираем файлы и каталоги по дате создания, начиная с указанной в компоненте DateTimePicker1.

Теперь попробуем организовать поиск файлов во всех вложенных каталогах. Это не так просто, как может показаться на первый взгляд. Нам придется вручную организовывать весь цикл входа-выхода из каталога, перебор файлов. Немного сложноватый материал, но возможно те из вас, кто уже работал с языком программирования pascal или другим, знакомы с технологией многократности и многовложенности использования одного и того же программного кода. Коротко объясню алгоритм работы такой программы.

  • Задание начальных условий поиска, поиск первого элемента.
  • Если найден файл, то выводим его и соответственно обрабатываем (выводим в список, открываем, удаляем и т.п.).
  • Если найден каталог, то начинаем новую процедуру поиска. Но программный код остается прежним. Мы просто заново вызываем и входим в эту же процедуру поиска.
  • Обрабатываем таким же образом все вложенные в этот каталог файлы и каталоги (начинаем новый поиск в обнаруженном каталоге).
  • Если элементов во вложенном каталоге больше нет, то обработка процедуры поиска в нем завершается, и мы выходим из нее. При этом мы оказываемся в том же месте, откуда и вызвали эту процедуру. Но она была вызвана из этой же процедуры. Поэтому программа продолжает свое выполнение дальше с момента возврата.
Илон Маск рекомендует:  Greeny - шаблон сайта в зеленом стиле HTML + CSS + JS

Таким образом, сколько витков программа наматывает на так называемый клубок, столько витков она и размотает. Программа на выполнении проходит все дерево вложенных каталогов, выполняя один и тот же кусок программного кода! И при этом данные условий поиска не перепутываются, и для каждой уникальной процедуры они сохраняются.

Рассмотрим пример. Создайте новый проект. Для создания отдельной процедуры поиска нам нужно объявить ее в соответствующем разделе (создаем ее вручную, поэтому и самостоятельно объявляем).

В разделе public пишем строку:

А в разделе кода программы, до слова «end.» вставляем пустой каркас процедуры

На форму вставляем компонент списка ListBox1, Button1, Edit1. Для компонента Edit1 свойство Text устанавливаем в «c:\\delphi\\». Обратите внимание на последний символ, знак «\\», присутствие которого в начальном пути поиска обязательно. Дальше процедура OnClick для кнопки Button1 выглядит следующим образом:

Созданная нами вручную процедура поиска:

Если вы в компоненте Edit1 в качестве начального условия поиска файлов зададите корневую папку диска, например «С:\\», то вы получите полный перечень всех файлов на данном диске. Обратите внимание на скорость поиска файлов и скорость работы вашей программы.

Процедуры и функции для работы с файлами в Delphi

Читайте также:

  1. Cущность банковского процента, его функции и роль.
  2. I. Функции времени в спутниковых технологиях.
  3. I. Экстремумы функции двух переменных
  4. II. Основные направления социально-медицинской работы с семьями детей ограниченными возможностями
  5. III. Лекционный материал по теме: ПРАВИЛА РАБОТЫ НА ЛЕКЦИИ
  6. IV. Функции
  7. IX. Лекционный материал: ОРГАНИЗАЦИЯ САМОСТОЯТЕЛЬНОЙ РАБОТЫ
  8. N В условиях интенсивной мышечной работы, при гипоксии (например, интенсивный бег на 200м в течении 30 с) распад углеводов временно протекает в анаэробных условиях
  9. N Выполняет функции гормона
  10. N Особенности структуры и функции обуславливают особенности в метаболизме клеток
  11. TCR. Функции Т-лимфоцитов
  12. VIII. Принципы работы вычислительной системы

Основные процедуры и функции:

Процедура: AssignFile(var Vf; FileName: string);Модуль: System

Описание: Процедура устанавливает ассоциативную связь между файловой переменной Vf и внешним файлом, имя которого определено параметром FileName. Все операции, производимые с файловой переменной, будут производиться со связанным с ней файлом. FileName — выражение типа string или PChar (если допускается расширенный синтаксис). Если в качестве имени файла указать пустую строку, то файловая переменная будет ассоциирована со стандартным файлом ввода (когда после AssignFile следует процедура Reset) или вывода (когда после следует процедура Rewrite).

Пример:
var Vf : file of Integer;
begin
.
AssignFile(Vf,'work.dat'); //инициализирует файловую переменную
Rewrite(Vf); //создает файл 'work.dat'
CloseFile(Vf); //закрывает файл
.
end;

Процедура: BlockRead(var Vf: file; var Buf; Count: Integer [;var AmtTransferred: Integer]); Модуль: System

Описание: Процедура читает одну или большее количество записей из открытого файла, связанного с файловой переменной Vf, в переменную Buf. Параметр Count определяет количество записей, которое необходимо прочитать из файла. В параметре AmtTransferred возвращается фактическое количество прочитанных записей, которое может быть меньше Count (например, когда размер последнего блока данных в файле меньше заданного размера записи). Максимальный размер прочитанного блока равен Count*RecSize байт. RecSize — размер записи, определенный, во время открытия файла (если размер записи не был задан, то используется значение по умолчанию — 128 байт). Параметр AmtTransferred является необязательным. Но если данный параметр опущен, а количество прочитанных записей меньше Count, то возникнет ошибка ввода/вывода (исключение EInOutError).

Пример:
var
Vf1, Vf2: file; NRead, NWrite: Integer;
Buf: array[1..1024] of Char;
begin
AssignFile(Vf1, 'read.txt');
Reset(Vf1, 1); //Устан-ет размер записи входного файла = 1
AssignFile(Vf2, 'write.txt');
Rewrite(Vf2, 1); //Устан-ет размер записи выходного файла = 1
repeat
BlockRead(Vf1, Buf, SizeOf(Buf), NRead); //читает данные
BlockWrite(Vf2, Buf, NRead, NWrite); //записывает данные
until (NRead = 0) or (NWrite <> NRead);
CloseFile(Vf1);
CloseFile(Vf2);
end;

Процедура: BlockWrite(var Vf: file; var Buf, Count: Integer [;var AmtTransferred: Integer]); Модуль: System

Описание: Процедура записывает одну или несколько записей из переменной Buf во внешний файл, связанный с файловой переменной Vf. Параметр Count определяет количество записей, которое необходимо записать в файл. В параметре AmtTransferred возвращается фактическое количество скопированных записей, которое может быть меньше Count (например, когда место на диске закончилось до окончания записи в файл). Максимальный размер записываемого блока равен Count*RecSize байт, где RecSize — размер записи, определенный, во время открытия файла или 128 байт, если размер записи не был определен. Параметр AmtTransferred является необязательным. Но если данный параметр опущен, и количество прочитанных записей будет меньше Count, то возникнет ошибка ввода/вывода (исключение EinOutError).

Пример:
var
Vf1, Vf2: file;
NRead, NWrite: Integer;
Buf: array[1..1024] of Char;
begin
AssignFile(Vf1, 'read.txt');
Reset(Vf1, 1); //Устан-ет размер записи входного файла = 1
AssignFile(Vf2, 'write.txt');
Rewrite(Vf2, 1); //Устан-ет размер записи выходного файла = 1
repeat
BlockRead(Vf1, Buf, SizeOf(Buf), NRead); //читает данные
BlockWrite(Vf2, Buf, NRead, NWrite); //записывает данные
until (NRead = 0) or (NWrite <> NRead);
CloseFile(Vf1);
CloseFile(Vf2);
end;

Процедура: CloseFile(var Vf); Модуль: System

Описание: Процедура разрывает ассоциативную связь между файловой переменной и внешним файлом, при этом, файл обновляется и закрывается. Механизм обработки ошибок ввода/вывода с помощью обработчиков исключений включается директивой компилятора <$I+>. При использовании директивы <$I->информацию об ошибках можно получить с помощью функции IOResult.

Пример:
var
Vf: file of Integer;
begin
.
AssignFile(Vf, 'work.dat'); //инициализирует файловую переменную
Rewrite(Vf); //создает файл 'work.dat'
CloseFile(Vf); //закрывает файл
.
end;

Процедура: Erase(Var Vf); Модуль: System

Описание: Удаляет файл, связанный с файловой переменной Vf. Vf — файловая переменная, ассоциированная с файлом любого типа. Перед удалением файл необходимо закрыть процедурой CloseFile.

Пример:
var
Vf: file;
begin
AssignFile(Vf, 'C:\WINDOWS\TEMP\tmpfile.tmp');
Rewrite(Vf); //создает временный файл 'tmpfile.tmp'
.
CloseFile(Vf); //закрывает файл
Erase(Vf); //удаляет файл
end;

Процедура: FindClose(var F: TSearchRec); Модуль: SysUtils

Описание: Процедура завершает последовательность вызовов функций FindFirst — FindNext и высвобождает память, выделенную при вызове функции FindFirst.

Процедура: Read(Vf, V1 [, V2, . Vn ]); Модуль: System

Описание: Процедура читает информацию из файла, ассоциированного с файловой переменной Vf, в переменную(ые) Vn.

Типизированные файлы. Читает запись (компонент) из файла в переменную. Файлы строкового типа. Читает все символы до маркера конца строки, не включая его или пока значение Eof(Vf) не будет равно True. Если размер прочитанной строки больше, чем размер строковой переменной, то строка усекается. После прочтения строки, каждый последующий вызов данной процедуры будет возвращать пустую строку, т.к. процедура Read не переводит указатель на новую строку. Если необходимо прочитать более одной записи из файла, то используйте процедуру ReadLn. Файлы символьного типа. Читает символ из файла. Если достигнут конец файла (т.е. Eof(Vf)=True), то процедура возвращает символ ‘Ctrl+Z’ (ASCII код 26).

Файлы целочисленных и действительных типов. Если тип переменной соответствует формату числовой строки, то переменной присваивается прочитанное значение, иначе возникает ошибка ввода/вывода.

Пример:
var
Vf1,Vf2: TextFile;
FileName1, FileName2: string;
C: Char;
begin
FileName1:='read.txt'; //подразумевается, что файл существует
FileName2:='write.txt';
AssignFile(Vf1, FileName1);
Reset(Vf1); //открывает файл 'read.txt'
AssignFile(Vf2, FileName2);
Rewrite(Vf2); //создает файл 'write.txt'
while not Eof(Vf1) do //повтор, пока не достигнут конец файла
begin
Read(Vf1, C); //читает символ из файла 'read.txt'
Write(Vf2, C); //записывает символ в файл 'write.txt'
end;
CloseFile(Vf2);
CloseFile(Vf1);
end;

Процедура: Rename(var Vf; NewName); Модуль: System

Описание: Процедура переименовывает файл, связанный с файловой переменной Vf. Новое имя файла указывается в параметре NewName. NewName — переменная типа string или PChar (если допускается расширенный синтаксис). После выполнения данной процедуры все операции c файловой переменной Vf будут производиться над переименованным файлом.

Процедура: Reset(var Vf: File [;RecSize: Word]); Модуль: System

Описание: Процедура открывает существующий файл и устанавливает указатель в начало файла. Vf — файловая переменная, ассоциированная с файлом любого типа при помощи процедуры AssignFile. RecSize — необязательный параметр, указывающий размер записи файла. Когда параметр RecSize опущен, размер записи принимается по умолчанию 128 байт. Если файл, связанный с файловой переменной Vf, не существует, то при вызове процедуры Reset возникнет ошибка. Если файл уже открыт, то при вызове данной процедуры он сначала закрывается, а затем снова открывается. Если с файловой переменной Vf связан текстовый файл, то он открывается только для чтения.

Процедура: Rewrite(var Vf: File [; Recsize: Word]); Модуль: System

Описание: Процедура создает новый файл и открывает его. Параметр Vf определяет файловую переменную, связанную с любым типом файлов при помощи процедуры AssignFile. RecSize — необязательный параметр, указывающий размер записи файла. Когда параметр RecSize опущен, размер записи принимается по умолчанию 128 байт. Если файл с заданным именем уже существует, то процедура удаляет старый файл и создает новый пустой файл. Если файл существует и открыт, то функция перед удалением старого файла сначала закрывает его. Если файловая переменная Vf связана с текстовым файлом, то он открывается только для записи. После вызова данной процедуры Eof(Vf)=True.

Процедура: Seek(var Vf; N: Longint); Модуль: System

Описание: Устанавливает файловый указатель в заданную позицию файла. Параметр Vf представляет собой файловую переменную, ассоциированную с типизированным или нетипизированным файлом. Для успешного выполнения процедуры файл должен быть открыт. Индекс позиции, в которую будет установлен указатель, определяется параметром N. Первая позиция в файле имеет индекс 0. Если необходимо добавить данные в конец файла, то поставить указатель в конец файла Vf можно следующим образом: Seek(Vf, FileSize(Vf)).

Процедура: Truncate(var Vf); Модуль: System

Описание: Процедура удаляет все записи в файле, находящиеся после текущей позиции (текущая позиция становится концом файла). Параметр Vf представляет собой файловую переменную, связанную с файлом любого типа, кроме текстовых (данная процедура не работает с текстовыми файлами). При вызове процедуры файл должен быть открыт.

Процедура: Write(Vf, V1. Vn); (для типизированных файлов) Модуль: System

Описание: Процедура записывает данные в типизированный файл. Параметр Vf представляет собой файловую переменную, связанную с типизированным файлом. Тип переменных V1 . Vn должен соответствовать типу фала. При записи в файл очередного компонента, указатель текущей позиции файла передвигается на следующий компонент. Если перед вызовом данной процедуры указатель стоит в конце файла (Eof(Vf)=True), то записываемые данные будут добавлены в конец файла (размер файла соответственно увеличится).

Функция: DeleteFile(const FileName: string): Boolean; Модуль: SysUtils

Описание: Функция удаляет файл с диска. При успешном выполнении возвращает True, а если файл не существует, или не может быть удален, то — False.

Пример:
var
FileName: string;
begin
.
if DeleteFile(FileName) then
MessageDlg('Файла успешно удален', mtInformation, [mbOk], 0)
else
MessageDlg('Ошибка удаления файла', mtInformation, [mbOk], 0);
.
end;

Функция: DiskFree(Drive: Byte): Int64; Модуль: SysUtils

Описание: Функция возвращает количество свободного места на диске, указанном в параметре Drive, в байтах. Диск определяется следующим образом: 0 — текущий, 1 — ‘A’, 2 — ‘B’, 3 — ‘С’, и т.д. Если указанный диск не существует, или недоступен, то функция возвращает -1.

Функция: DiskSize(Drive: Byte): Int64; Модуль: SysUtils

Описание: Функция возвращает размер диска Drive в байтах. Диск определяется следующим образом: 0 — текущий, 1 — ‘A’, 2 — ‘B’, 3 — ‘С’, и т.д. Если указанный диск не существует, или недоступен, то функция возвращает -1.

Функция: Eof(var Vf ): Boolean; Модуль: System

Описание: Функция определяет, стоит ли указатель текущей позиции в конце файла Vf (Vf — файловая переменная). Если указатель стоит на последнем символе файла, или файл не содержит данных, то функция возвращает True, а иначе — False.

Пример:
var
Vf1,Vf2: TextFile;
FileName1, FileName2: string;
C: Char;
begin
FileName1:='read.txt'; //подразумевается, что файл существует
FileName2:='write.txt';
AssignFile(Vf1, FileName1);
Reset(Vf1); //открывает файл 'read.txt'
AssignFile(Vf2, FileName2);
Rewrite(Vf2); //создает файл 'write.txt'
while not Eof(Vf1) do //повтор, пока не достигнут конец файла
begin
Read(Vf1, C); //читает символ из файла 'read.txt'
Write(Vf2, C); //записывает символ в файл 'write.txt'
end;
CloseFile(Vf2);
CloseFile(Vf1);
end;

Функция: FileExists(const FileName: string): Boolean; Модуль: SysUtils

Описание: Функция проверяет, существует ли файл с именем FileName. Если файл существует, то функция возвращает True, иначе — False.

Функция: FileGetAttr(const FileName: string): Integer; Модуль: SysUtils

Описание: Функция возвращает атрибуты файла, имя которого передано в параметре FileName. Атрибуты могут быть разделены с помощью оператора AND и следующих значений констант атрибутов:

Константа Значение Описание
faReadOnly faHidden faSysFile faVolumeID faDirectory faArchive faAnyFile $00000001 $00000002 $00000004 $00000008 $00000010 $00000020 $00000003F Только чтение Скрытый файл Системный файл Идентификатор тома Каталог Архивный файл Произвольный файл

В случае возникновении ошибки функция возвращает -1.

Функция: FilePos(var Vf): LongInt; Модуль: System

Описание: Функция возвращает текущую позицию указателя в файле (файл должен быть предварительно открыт). Параметр Vf представляет собой файловую переменную, ассоциированную с файлом. Данная функция не может быть применена к текстовым файлам.

Пример:
var
Vf: File of Byte;
S : string;
Size, I: Integer;
begin
Randomize; AssignFile(Vf, 'work.dat');
Rewrite(Vf); //создает файл work.dat
for I:= 0 to 100 do
begin
Seek(Vf, I);
Write(Vf, I); //записывает в файл послед. чисел от 1 до 100
end;
Size:= FileSize(Vf); //определяет размер файла
Seek(Vf, random(Size)); //устанавливает указатель в произвольную позицию
MessageDlg('Позиция указателя: ' + IntToStr(FilePos(Vf)), mtInformation, [mbOk], 0);
.
CloseFile(Vf);
end;

Функция: FileSearch(const FileName, DirList: string): string; Модуль: SysUtils

Описание: Функция осуществляет поиск файла FileName в каталогах, указанных в параметре DirList. Имя файла должно быть представлено в DOS-формате. Список каталогов DirList представляет собой строку, содержащую наименования каталогов, разделенных точками с запятой (например, ‘C:\;C:\WINDOWS; C:\WINDOWS\TEMP’). Если файл найден, то функция возвращает полный путь к файлу, а иначе возвращается пустая строка.

Функция: FileSetAttr(const FileName: string): Integer; Модуль: SysUtils

Описание: Функция устанавливает атрибуты файла, имя которого передано в параметре FileName. Атрибуты перечисляются в параметре Attr с помощью оператора OR. В случае успешного выполнения функция возвращает 0, а иначе возвращается код ошибки Windows.
Значение констант атрибутов:

Константа Значение Описание
faReadOnly faHidden faSysFile faVolumeID faDirectory faArchive faAnyFile $00000001 $00000002 $00000004 $00000008 $00000010 $00000020 $00000003F Только чтение Скрытый файл Системный файл Идентификатор тома Каталог Архивный файл Произвольный файл

Пример:для файла устанавливаются атрибуты ‘Скрытый файл’ и ‘Только чтение’.
FileSetAttr('MyFile.zzz', faReadOnly or faHidden);

Функция: FileSize(var Vf): Integer; Модуль: System

Описание: Функция возвращает размер файла, связанного с файловой переменной Vf в байтах. Для файлов типа Record функция возвращает количество записей. Если файл не содержит данных, то функция возвращает 0. Файл должен быть обязательно открыт. Данная функция не применима к текстовым файлам.

Описание: Функция находит файл с набором атрибутов Attr в каталоге и по маске, определенных константой Path. Найденное имя файла записывается в переменную F. Если указанный файл найден, то функция возвращает 0, иначе возвращается код ошибки Windows. Параметр Attr — комбинация нескольких констант атрибутов файла или их значений. Константа Path представляет собой полный путь с маской файла (например, ‘C:\MYDIR\*.ini’ ). Повторный поиск файла производится с помощью функции FindNext. По окончанию поиска необходимо высвободить память, выделенную при вызове функции FindFirst, с помощью процедуры FindClose. Значение констант атрибутов:

Илон Маск рекомендует:  Управление word ом из дельфи
Константа Значение Описание
faReadOnly faHidden faSysFile faVolumeID faDirectory faArchive faAnyFile $00000001 $00000002 $00000004 $00000008 $00000010 $00000020 $00000003F Только чтение Скрытый файл Системный файл Идентификатор тома Каталог Архивный файл Произвольный файл

Описание: Функция используется в цепочке FindFirst - FindNext - FindClose для повторного поиска файла. Первый поиск осуществляется с помощью функции FindFirst. Функция FindNext возвращает следующий найденный файл, удовлетворяющий условиям поиска определенным при вызове функции FindFirst. В случае успешного выполнения, функция FindNext возвращает 0, а в случае возникновения ошибки — код ошибки Windows. По окончанию поиска необходимо высвободить память с помощью функции FindClose.

Функция: IOResult: Integer; Модуль: System

Описание: Функция возвращает статус ошибки последней выполненной операции ввода/вывода. Использование данной функции возможно только при отключенной проверке ошибок директивой компилятора <$I->. При возникновении ошибки ввода/вывода, все последующие операции ввода/вывода будут игнорироваться до тех пор, пока не будет сделано обращение к функции IOResult. Вызов IOResult очищает внутренний флаг ошибки. Альтернативным способом обработки ошибок ввода/вывода является использование механизма обработки исключительных ситуаций, который включается директивой компилятора <$I+>.

Функция: RenameFile(const OldName, NewName: string): Boolean; Модуль: SysUtils

Описание: Функция переименовывает файл OldName в NewName. При успешном выполнении возвращает True, а в случае ошибки False.

Пример:
begin
if RenameFile('OLD.TXT', 'NEW.TXT') then
MessageDlg(Файл переименован!', mtInformation, [mbOk], 0)
else
ErrorMsg('Невозможно переименовать файл!');
end;

| следующая лекция ==>
Современные способы и средства тушения пожаров | Работа с текстовыми файлами

Дата добавления: 2014-01-07 ; Просмотров: 880 ; Нарушение авторских прав? ;

Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет

FindFirst, FindNext (Delphi Xe, Win7) Оценка не является правильным

У меня есть некоторые файлы в каталоге. Я пытаюсь получить эти файлы с FindFirst и FindNext, но я не могу получить тот же заказ на Windows 7.

Когда я попробовать использовать мой код, я получил

Как я могу получить список файлов на правильном порядке ранга?

Примечание: Результат по-прежнему неправильно, если я могу использовать ListFiles.Sorted = True

Я думаю, что я решение, создал функцию.

Я добавил еще одну строку ListFiles.CustomSort (SortFilesByName); // (ListFiles, 1,2): целое число); Перед FindClose (SR);

По словам jachguate, сортировка производится Explorer.exe, а не в файловой системе. FindFirst / FindNext не гарантирует какую — либо конкретная сортировку, включая простую ASCII основы, так что вы не должны полагаться на него. Вы, однако, не нужно повторно реализовать цифровой вид в Delphi. Окна обнажает один он использует в качестве StrCmpLogicalW , который находится в shlwapi.dll . Импорта выглядит следующим образом :

Можно отключить такое поведение в Windows. Если вы хотите , чтобы следить за тем , что использует для Windows, вам нужно вызвать SHRestricted с REST_NOSTRCMPLOGICAL значением. Если он возвращает истину , вы должны использовать AnsiCompareStr вместо этого.

Так что ваша последняя функция сортировки должна быть что-то вроде этого:

Вы можете кэшировать результат вызова SHRestricted, но если вам нужно следить за WM_SETTINGSCHANGE широковещательным сообщение и перечитать его , когда вы получаете один.

Различные заказы, которые вы видите в проводнике Windows реализованы в explorer.exe, а не в файловой системе.

Численный порядок сортировки это новая функция в Windows 7, так что если вы сортировать по имени , и у вас есть куча файлов с префиксом с последующим числами, исследователь «определяет» , что структура и не представляет список , отсортированный по имени , традиционный способ, но сортируется по префиксу , а затем по номеру (как если бы строка была несколько Integer).

Если вы хотите сделать то же самое в Delphi, вы можете сделать это, добавив все имена файлов, возвращаемые FindFirst / FindNext к TSlist, а затем отсортировать список строк, используя эту функцию сравнения:

Под «ранга», вы имеете в виду порядок сортировки.

Файлы сортировки в нужном порядке (на основании значения ASCII из символов). 2 приходит после того, 19 потому что сравнение делается только до того же количества символов в обоих имен, и «2» происходит после того, как 1 .

Если вы хотите, чтобы сортировать правильно как числа, необходимо левой колодки число с нулями , поэтому они все же ширину (например., Вместо SampleFile.2.png , использования SampleFile.02.png ). Это приведет к «02» , чтобы прийти до , 19 чтобы они правильно сортировать численно.

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

Метод Range. FindNext (Excel) Range.FindNext method (Excel)

Продолжает поиск, начатый методом Find . Continues a search that was begun with the Find method. Находит следующую ячейку, которая соответствует тем же условиям, и возвращает объект Range , представляющий эту ячейку. Finds the next cell that matches those same conditions and returns a Range object that represents that cell. Это не влияет на выделенный фрагмент или активную ячейку. This does not affect the selection or the active cell.

Синтаксис Syntax

Expression. FindNext (После) expression.FindNext (After)

выражение: переменная, представляющая объект Range. expression A variable that represents a Range object.

Параметры Parameters

Имя Name Обязательный или необязательный Required/Optional Тип данных Data type Описание Description
After After Необязательный Optional Variant Variant Ячейка, по которой требуется выполнить поиск. The cell after which you want to search. Соответствует положению активной ячейки, когда поиск выполняется из пользовательского интерфейса. This corresponds to the position of the active cell when a search is done from the user interface. Обратите внимание, что After должен быть одной ячейкой в диапазоне. Be aware that After must be a single cell in the range.

Помните, что поиск начинается после этой ячейки; Поиск в указанной ячейке выполняется только после того, как метод переносится обратно в эту ячейку. Remember that the search begins after this cell; the specified cell is not searched until the method wraps back around to this cell. Если этот аргумент не указан, поиск начинается после ячейки в левом верхнем углу диапазона. If this argument is not specified, the search starts after the cell in the upper-left corner of the range.

Возвращаемое значение Return value

Комментарии Remarks

Когда поиск достигает конца указанного диапазона поиска, он возвращается в начало диапазона. When the search reaches the end of the specified search range, it wraps around to the beginning of the range. Чтобы остановить поиск при этом возврате, сохраните адрес первой найденной ячейки, а затем проверьте адрес каждой последующей найденной ячейки, сравнив его с этим сохраненным адресом. To stop a search when this wraparound occurs, save the address of the first found cell, and then test each successive found-cell address against this saved address.

Пример Example

В этом примере показано, как найти все ячейки в диапазоне a1: A500, содержащие значение 2, и изменить его значение на 5. This example finds all cells in the range A1:A500 that contain the value 2 and changes their value to 5.

В этом примере выполняется поиск всех ячеек в первых четырех столбцах, содержащих константу X, и скрытие столбца, содержащего значение X. This example finds all the cells in the first four columns that contain a constant X, and hides the column that contains the X.

В этом примере выполняется поиск всех ячеек в первых четырех столбцах, содержащих константу X, и раскрытие столбца, содержащего значение X. This example finds all the cells in the first four columns that contain a constant X, and unhides the column that contains the X.

Поддержка и обратная связь Support and feedback

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Have questions or feedback about Office VBA or this documentation? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь. Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.

FindFirst,FindNext,FindClose

I want to make a new .txt file which parameters i load from a .script file. It works fine in the root. .script file is in the root directry.The result is:

  1. 192.121.2.2 login Lucey password red
  2. 192.321.2.1 login Steve password apple

But if i want to add C:\Script\Files the code i use is wrong, what is the problem? Pls help!

  1. 192.121.2.2 login Lucey password red
  2. 192.121.2.2 login Lucey password red
  3. 192.321.2.1 login Steve password apple

Delphi, возвращаемая ошибка FindNext 18 даже есть папка

приветствия из Исландии!

Начнем с того, что я искал оба с google и здесь без результата.

Я пишу в Delphi и имею многолетний опыт работы в Delphi (более 30 лет в Pascal).

В течение этих лет я создал множество программных программ для файлов и использовал функции FindFirst и FindNext почти в каждом таком приложении. Сегодня я использовал старую файловую программу, которую я написал, и выяснил, что она не работает на 100%

Это было нормально, пока имя каталога не стало каким-то странным, т.е. имя с несколькими периодами внутри. История заключается в том, что я устанавливаю Wamp и некоторые папки, которые были названы с этим странным методом.

Когда я отлаживал, я обнаружил, что Findnext только что вернул ошибку 18, которая является той же ошибкой, что и FindNext, когда больше файлов не найти.

Я попробовал FindFirstFile и FindNextFile с тем же результатом. Я думаю попробовать API FindNextFileEx, если это связано с длинными именами файлов, но не так оптимистично..

Также я заметил, что атрибут в этих папках не был 16 (hex10), а был 8208 (8192 + 16), но он не имеет ничего общего с этой проблемой, поскольку я мог бы, например, маскировать (AND) attr с $00FF и т.д.

Используемый вами шаблон ( ‘\*.’ ) соответствует именам файлов и каталогов без периода в нем (что также означает отсутствие расширения для файлов). Попробуйте:

Чтобы немного расширить, функции VCL» Найти.. «- это обертки вокруг базовых функций API» Найти.. «, которые не заботятся о том, хотите ли вы искать файлы или папки (» Attr», параметр, который вы можете передать на sysutils.FindFirst , является средством, предоставляемым VCL, и VCL может влиять только на результат поиска, фильтруя его). Таким образом, результат использования шаблона ‘ *. не будет отличаться для файла или папки. Если шаблон не может вернуть имя файла с периодом в нем, он также не сможет вернуть папку с периодом в ней.

Использование параметра одинаково с командой dir . Перейдите в папку «..\apps» из командной строки, и если вы выберете >dir *. , вы не увидите папки в указанном вами вопросе.

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

FindNext — Функция Delphi

В этом уроке мы с вами ознакомимся с основными принципами программной организации поиска файлов. Для начала определимся, зачем нам это может быть нужно. Например, вам нужно при запуске программы на выполнение просканировать определенный каталог на присутствие DOC файлов, и при наличии таковых открыть их на редактирование или напечатать. А как вам такая идея: фоновый поиск EXE файла в сети, и при обнаружении новой версии, автоматическое обновление.

Многим известны программы, где можно искать файлы, правила поиска файла. Файлы можно искать как с файловых командирах (нортон, волков, дос навигатор, фар), так в любой операционной системе. В операционной системе windows диалоговое окно поиска файла вызывается «Пуск» — «Поиск» — «Файлы и папки». В открывшимся окне необходимо задать условие искомого файла (название, маска) и путь начального поиска (каталог). На других вкладках этого диалогового окна можно расширить возможности поиска по дате изменения, по содержащемуся тексту, по размеру.

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

  • Буквы и цифры в названии и расширении.
  • Символ * (звездочка, математический знак «умножить»), заменяющий любое количество всевозможных букв и цифр в названии или расширении.
  • Символ ? (знак вопроса), заменяющий одну букву или цифру в названии или расширении искомого элемента.

Например, вы ищите все текстовые файлы с расширением TXT. В поле имени искомого файла вам нужно ввести «*.TXT» (пишется без кавычек) и система найдет все такие файлы в указанном диске или каталоге. Если вам надо найти все файлы с названием semen, то в поле поиска файла нужно ввести «semen.*». Если вам нужно найти элементы с третьей буквой k и с первой буквой t в расширении, то вводите «??k*.t*». Здесь знак вопроса указывает на любой символ, третьим символом по порядку идет буква k, далее название файла (каталога) может состоять из любого количества букв и цифр, указываем звездочку. В расширении первая буква t, дальше следует любое расширение.

Примечание: файлы и каталоги в операционной системе windows ищутся без учета регистра, т.е. строчние и прописные буквы не различаются.

Теперь рассмотрим программный поиск файлов с помощью языка программирования object pascal.

Вся организация цикла поиска, а именно это и есть цикл с продолжением поиска, сводится к:

  • Задание условий поиска. Это каталог и маска искомого элемента или элементов, атрибуты элемента(ов). При задании условий поиска сразу происходит поиск первого подходящего под условие. Это функция FindFirst.
  • Продолжение поиска следующего элемента по заданным в первом пункте условиям. Это функция FindNext и она может вызываться сколько угодно раз, пока все файлы и каталоги, удовлетворяющие условию, не будут найдены.
  • Закрытие поиска и освобождение памяти, выделяемую системой под поиск. Команда FindClose.

где: Каталог для поиска и маска искомого элемента — строковая величина, имеющая тип String, может, например, содержать ‘c:\\*.*’ — все элементы в корне диска С. Обратите внимание, что указывается полный путь для поиска.

Атрибуты искомого элемента это пользовательские или системные атрибуты, которые может иметь файл (каталог, метка диска). Вот их перечень:

  • faReadOnly — Файлы «только чтение». Такой атрибут устанавливается на файлы, которые не рекомендовано изменять, удалять. Такой атрибут имеют файлы, например, записанные на компакт-дисках.
  • faHidden — Скрытые файлы. При обычных установках браузера и командира эти файлы невидимы.
  • faSysFile — Системные файлы.
  • faVolumeID — Файл метки диска. Такой элемент в своем имени имеет название диска (максимум 11 символов).
  • faDirectory — Атрибут признака каталога.
  • faArchive — Обычный файл. По умолчанию устанавливается на заново создаваемых файлах.
  • faAnyFile — Если установить в качестве атрибута искомых элементов, то будет произведен поиск по всем вышесказанным атрибутам.

Эти вам нужно искать только элементы, имеющие атрибут «каталог» и «скрытый», то можно применить знак математического сложения, например faDirectory + faHidden.

Поисковая переменная имеет тип TSearchRec. В нее, при успешном результате поиска, будет занесены все необходимые данные о найденном файловом элементе.

Поскольку FindFirst является функцией, то она должна сама возвращать некоторое значение. Это значение имеет тип Integer и означает результат поиска файла (код ошибки поиска). Если файл найден, то принимает нулевое значение.

Эта функция продолжает поиск, заданный в функции FindNext. Возвращает значение результата поиска (нулевое в случае успешного поиска).

Закрывает поиск и освобождает память, выделенную системой под поиск.

Теперь рассмотрим пример. Допустим, нам надо найти все файлы и каталоги в каталоге DELPHI, находящийся на диске C:. В дальнейшем, вы можете самостоятельно, изменяя маску, менять условия поиска. Для формы с компонентом ListBox1 и кнопкой Button1 реакция на OnClick по кнопке:

Представленный пример кода, в принципе, является основой для организации более углубленного поиска, поиска файлов по времени создания, по содержащимся словам. Если вы запустите эту программу на выполнение, то при нажатии на кнопку Button1 вы увидите в списке в первой и второй строке элементы «.» и «..». Это элементы, имеющие атрибут «каталог». Первый содержит связь с корневым каталогом диска, второй содержит связь к каталогом верхнего уровня. Со вторым вы встречаетесь в дисковых командных оболочках, например нортон, когда выбираете каталог «..» и нажимаете на «ввод». Тем самым вы попадаете в каталог на уровень выше. Естественно, в нашей поисковой программе такие элементы не надо вносить в список, поэтому мы игнорируем их нахождение. Исправляем процедуру нажатия на кнопку Button1:

В этом случае, при нахождении каталога с именем «.» или с именем «..» программа продолжит обработку цикла поиска без вывода найденного имени элемента в компонент списка ListBox1.

Теперь рассмотрим тип TSearchRec. Он имеет в себе несколько полезных свойств:

  • Name — название найденного каталога (файла);
  • Size — размер файла в байтах;
  • Attr — атрибуты каталога (файла);
  • Time — упакованное значение времени и даты создания каталога (файла).

Все вышеперечисленные свойства мы уже рассмотрели или они понятны сразу, за исключением свойства Time. Оно имеет тип Integer и содержит в себе упакованное значение даты и времени создания файла. Распаковка производится с помощью функции FileDateToDateTime, которая в результате возвращает значение даты и времени.

Теперь добавим в нашу форму компонент DateTimePicher1 (страница Win32) и допишем несколько строк.

Как вы уже заметили, мы отбираем файлы и каталоги по дате создания, начиная с указанной в компоненте DateTimePicker1.

Теперь попробуем организовать поиск файлов во всех вложенных каталогах. Это не так просто, как может показаться на первый взгляд. Нам придется вручную организовывать весь цикл входа-выхода из каталога, перебор файлов. Немного сложноватый материал, но возможно те из вас, кто уже работал с языком программирования pascal или другим, знакомы с технологией многократности и многовложенности использования одного и того же программного кода. Коротко объясню алгоритм работы такой программы.

  • Задание начальных условий поиска, поиск первого элемента.
  • Если найден файл, то выводим его и соответственно обрабатываем (выводим в список, открываем, удаляем и т.п.).
  • Если найден каталог, то начинаем новую процедуру поиска. Но программный код остается прежним. Мы просто заново вызываем и входим в эту же процедуру поиска.
  • Обрабатываем таким же образом все вложенные в этот каталог файлы и каталоги (начинаем новый поиск в обнаруженном каталоге).
  • Если элементов во вложенном каталоге больше нет, то обработка процедуры поиска в нем завершается, и мы выходим из нее. При этом мы оказываемся в том же месте, откуда и вызвали эту процедуру. Но она была вызвана из этой же процедуры. Поэтому программа продолжает свое выполнение дальше с момента возврата.

Таким образом, сколько витков программа наматывает на так называемый клубок, столько витков она и размотает. Программа на выполнении проходит все дерево вложенных каталогов, выполняя один и тот же кусок программного кода! И при этом данные условий поиска не перепутываются, и для каждой уникальной процедуры они сохраняются.

Рассмотрим пример. Создайте новый проект. Для создания отдельной процедуры поиска нам нужно объявить ее в соответствующем разделе (создаем ее вручную, поэтому и самостоятельно объявляем).

В разделе public пишем строку:

А в разделе кода программы, до слова «end.» вставляем пустой каркас процедуры

На форму вставляем компонент списка ListBox1, Button1, Edit1. Для компонента Edit1 свойство Text устанавливаем в «c:\\delphi\\». Обратите внимание на последний символ, знак «\\», присутствие которого в начальном пути поиска обязательно. Дальше процедура OnClick для кнопки Button1 выглядит следующим образом:

Созданная нами вручную процедура поиска:

Если вы в компоненте Edit1 в качестве начального условия поиска файлов зададите корневую папку диска, например «С:\\», то вы получите полный перечень всех файлов на данном диске. Обратите внимание на скорость поиска файлов и скорость работы вашей программы.

Типы, функции и процедуры Delphi для работы с файлами.

Содержание:


Процедуры и функции для работы с файлами.


Тип TSearchRec.


Тип TWin32FindData.


Процедуры и функции для работы с файлами

Ниже приведена таблица, содержащая стандартные процедуры и функции Delphi7 для работы с файлами и их краткое описание. Функции в таблице расположены в алфавитном порядке.

Связывает имя внешнего дискового файла с файловой переменной.

procedure AssignFile(var F; FileName: string);

F — имя файловой переменной
FileName — имя файла

Изменяет текущую директорию.

procedure ChDir(const S: string); overload;
procedure ChDir(P: PChar); overload;

Разрывает связь между файловой переменной и внешним дисковым файлом.

procedure CloseFile(var F);

Создает новую директорию.

function CreateDir(const Dir: string): Boolean;

Удаляет файл с диска.

function DeleteFile(const FileName: string): Boolean;

Определяет существует ли указанная директория.

function DirectoryExists(const Directory: string): Boolean;

Возвращает число свободных байт на указанном диске.

function DiskFree(Drive: Byte): Int64;

Drive — номер диска, где 0 = текущий диск, 1 = A, 2 = B . и т.д.

Возвращает размер указанного диска в байтах.

function DiskSize(Drive: Byte): Int64;

Drive — номер диска, где 0 = текущий диск, 1 = A, 2 = B . и т.д.

Возвращает время последней модификации файла (timestamp) в формате операционной системы. Полученное значение может быть преобразовано в формат TDateTime при помощи функции FileDateToDateTime.

function FileAge(const FileName: string): Integer;

Закрывает указанный файл.

procedure FileClose(Handle: Integer);

Создает новый файл.

function FileCreate(const FileName: string): Integer; overload;
function FileCreate(const FileName: string; Rights: Integer): Integer; overload;

Если возвращаемое значение больше 0 функция выполнена успешно и его значение соответствует handle открытого файла. -1 — произошла ошибка открытия файла.
Параметр Rights используется только для Linux. В Windows он игнорируется.

Преобразует значение времени файла (timestamp) из формата операционной системы в TDateTime.

function FileDateToDateTime(FileDate: Integer): TDateTime;

Проверяет существует ли указанный файл.

function FileExists(const FileName: string): Boolean;

Возвращает файловые аттрибуты заданного файла как строку бит. Возвращаемое значение полностью соответствует полю Attr в TSearchRec..

function FileGetAttr(const FileName: string): Integer;

Возвращает время последней модификации файла (timestamp) в формате операционной системы. Используйте её для файла, заданного его handle.

function FileGetDate(Handle: Integer): Integer;

Возвращает TRUE если файл можно открыть только для чтения.

function FileIsReadOnly(const FileName: string): Boolean;

Открывает указанный файл в режиме, заданном при помощи одной из констант File open mode.

function FileOpen(const FileName: string; Mode: LongWord): Integer;

Если возвращаемое значение больше 0 функция выполнена успешно и его значение соответствует handle открытого файла. -1 — произошла ошибка открытия файла.

Читает указанное число байт из файла в буфер. Перед этим файл должен быть открыт при помощи функции FileOpen или FileCreate.

function FileRead(Handle: Integer; var Buffer; Count: Integer): Integer;

Handle — хендл файла, возвращаемый функциями FileCreate или FileOpen
Buffer — буфер
Count — размер буфера

Возвращаемое значение — действительное количество полученных байт. Оно может быть меньше размера буфера.

Ищет файл в указанных папках.

function FileSearch(const Name, DirList: string): string;

Name — короткое имя файла
DirList — список директорий для поиска. Для Windows директории для поиска в списке отделяются друг от друга точкой с запятой, а в Linux — двоеточием.

Возвращаемое значение — полное имя файла. Если файл не найден — пустая строка.

Перепозиционирует позицию чтения/записи в открытом файле. Перед этим файл должен быть открыт при помощи функции FileOpen или FileCreate.

function FileSeek(Handle, Offset, Origin: Integer): Integer; overload;
function FileSeek(Handle: Integer; const Offset: Int64; Origin: Integer): Int64;overload;

Handle — хендл файла, возвращаемый функциями FileCreate или FileOpen
Offset — указывает число байт смещения от Origin, куда будет перепозизиционирована точка.
Origin — определяет три варианта позиционирования:
0 — смещение задается относительно начала файла;
1 — смещение задается относительно текущей позиции;
2 — смещение задается относительно конца файла.

Если FileSeek выполнена успешно, она возвращает новую позицию точки чтения/записи; иначе она возвращает -1.

Устанавливает файловые аттрибуты заданного файла.

function FileSetAttr(const FileName: string; Attr: Integer): Integer;

Значение Attr формируется комбинацией соответствующих констант файловых аттрибутов как показано ниже:

Возвращаемое значение — 0; иначе — код ошибки.

Примечание: Значения констант файловых аттрибутов приведены в описании TSearchRec.

Примечание: FileSetAttr доступна только для Windows.

Устанавливаетвремя последней модификации файла (timestamp) в формате операционной системы.

Для Windows:
function FileSetDate(Handle: Integer; Age: Integer): Integer; overload;

Cross-platform:
function FileSetDate(const FileName: string; Age: Integer): Integer; overload;

Handle — handle файла для изменения (Этот синтаксис доступен только для Windows.);
FileName — имя файла;
Age — устанавливаемое время модификации в формате операционной системы. Используйте функцию DateTimeToFileDate для перевод времени из формата TDateTime в формат операционной системы.

Возвращаемое значение — 0; иначе — код ошибки.

Разрешает использовать файл только для чтения.

function FileSetReadOnly(const FileName: string; ReadOnly: Boolean): Boolean;

Записывает содержимое буфера в текущую позицию в файле.

function FileWrite(Handle: Integer; const Buffer; Count: Integer): Integer;

Handle — хендл файла, возвращаемый функциями FileCreate или FileOpen
Buffer — буфер
Count — число байт, передаваемых файлу из буфера

Возвращаемое значение — действительное количество записаных байт или -1 в случае ошибки.

Освобождает память, выделенную под функцию FindFirst и прерывает последовательность FindFirst/FindNext.

Ищет первый файл с заданными аттрибутами в указанной папке.

function FindFirst(const Path: string; Attr: Integer; var F: TSearchRec): Integer;

Path — имя папки и маска имен файлов для поиска, включая wildcard characters. (Например, ‘.\test\*.*’ задает все файлы в текущей папке.)
Attr — аттрибут, указывающий включать в поиск специальные файлы в дополнение к нормальным. Аттрибуты можно комбинировать, складывая значения. Например, (faReadOnly + faHidden).
F — возвращаемый параметр. Результат работы функции.

Возвращаемое значение — 0, если файл найден; иначе — код ошибки.

Возвращает имя следующего файла с параметрами, предварительно заданными функцией FindFirst.

F — возвращаемый параметр. Результат работы функции.

Возвращаемое значение — 0, если файл найден; иначе — код ошибки.

Создает новую папку, включая родительские папки, если они до этого не существовали, и родительские папки.

function ForceDirectories(Dir: string): Boolean;

Возвращает полное имя рабочей папки.

function GetCurrentDir: string;

Возвращает имя рабочей папки.

procedure GetDir(D: Byte; var S: string);

D — номер диска, где 0 = текущий диск, 1 = A, 2 = B, 3 = C . и т.д.
S — возвращаемый параметр. Результат работы процедуры.

Удаляет существующую пустую папку.

function RemoveDir(const Dir: string): Boolean;

Изменяет имя файла.

function RenameFile(const OldName, NewName: string): Boolean

Назначает рабочую папку.

function SetCurrentDir(const Dir: string): Boolean;

Тип TSearchRec

TSearchRec содержит информацию о файле, найденом при помощи функции FindFirst или FindNext.

Тип TSearchRec определяет информацию о файле, найденую путем вызова функции FindFirst или FindNext. Если файл найлен, поля параметров TSearchRec изменяются в соответствии с найденным файлом.

Attr — представляет файловые аттрибуты файла. Проверяйте параметр Attr на следующие константы аттрибутов или их значения чтобы узнать какие аттрибуты назначены данному файлу.

В Windows константы аттрибутов полностью соответствуют файловым аттрибутам DOS.

Наименование Тип
модуль
Описание
AssignFile процедура
System
ChDir процедура
System
CloseFile процедура
System
CreateDir функция
SysUtils
DeleteFile функция
SysUtils
DirectoryExists функция
SysUtils
DiskFree функция
SysUtils
DiskSize функция
SysUtils
File mode константы
System
Используются для открытия и закрытия дисковых файлов.

const fmClosed = $D7B0; // closed file
const fmInput = $D7B1; // reset file (TTextRec)
const fmOutput = $D7B2; // rewritten file (TTextRec)
const fmInOut = $D7B3; // reset or rewritten file (TFileRec)
const fmCRLF = $8; // DOS-style EoL and EoF markers (TTextRec)
const fmMask = $D7B3; // mask out fmCRLF flag (TTextRec)

Эти константы используются в первую очередь в Delphi коде, где поле Mode в TFileRec и TTextRec содержит одно из этих значений.

File open mode константы
SysUtils
Константы режима открытия файла используются для контроля режима доступа к файлу или потоку.

Для Windows:

Эти константы используются для конроля режима совместного доступа при открытии файла или потока.

TFileStream конструктор имеет параметр Mode в котрый вы можете прописать одну из следующих констант:

Константа Описание
fmCreate Если файл уже существует, то он открывается для записи, иначе создается новый файл. В отличие от других констант, которые декларируются в модуле SysUtil, эта константа декларируется в модуле classes.
fmOpenRead Открываетдоступ только для чтения.
fmOpenWrite Открываетдоступ только для записи.
fmOpenReadWrite Открывает доступ для чтения и записи.
fmShareCompat Compatible with the way FCBs are opened. Не используйте этот режим в кросс-платформенных приложениях.
fmShareExclusive Доступ к чтению и записи запрещен.
fmShareDenyWrite Доступ для записи запрещен.
fmShareDenyRead Доступ для чтения запрещен. Не используйте этот режим в кросс-платформенных приложениях.
fmShareDenyNone Открывает полный доступ для других.
FileAccessRights пременная Points to the command-line arguments specified when the application is invoked. Только для Linux. В Windows эта переменная игнорируется.
FileAge функция
SysUtils
FileClose процедура
SysUtils
FileCreate функция
SysUtils
FileDateToDateTime функция
SysUtils
FileExists функция
SysUtils
FileGetAttr функция
SysUtils
FileGetDate функция
SysUtils
FileIsReadOnly функция
SysUtils
FileOpen функция
SysUtils
FileRead функция
SysUtils
FileSearch функция
SysUtils
FileSeek функция
SysUtils
FileSetAttr функция
SysUtils
FileSetDate функция
SysUtils
FileSetReadOnly функция
SysUtils
FileWrite функция
SysUtils
FindClose процедура
SysUtils
FindFirst функция
SysUtils
FindNext функция
SysUtils
ForceDirectories функция
SysUtils
GetCurrentDir функция
SysUtils
GetDir процедура
System
RemoveDir функция
SysUtils
RenameFile функция
SysUtils
SetCurrentDir функция
SysUtils
Константа Значение Описание
faReadOnly 1 Файлы Только для чтения
faHidden 2 Скрытые файлы
faSysFile 4 Системные файлы
faVolumeID 8 Файлы идентификации тома
faDirectory 16 Файлы папок
aArchive 32 Архивные файлы
faSymLink 64 Символьная ссылка
faAnyFile 71 Любые файлы

Примечание:
Константа faReadOnly из модуля SysUtils имеет то же самое имя, что и константа из модуля Db, определенная в типе TFieldAttribute. Если в своих исходниках вы одновременно используете модули SysUtils и Db, то, чтобы исключить неопределенность, необходимо конкретно указывать из какого модуля вы используете значение константы faReadOnly. В Delphi это записывается так: SysUtils.faReadOnly.

Чтобы проверить файл на определенный аттрибут, комбинируйте значение поля Attr с соотвтствующей константой при помощи оператора AND. Если файл имеет этот аттрибут, результат будет больше 0. Например, если найденый файл является скрытым, то следующие выражения дадут значение TRUE:

Time содержит время последнего изменения файла. Оно может быть преобразовано в формат TDateTime при помощи функции FileDateToDateTime.

Size содержит размер файла в байтах.

Name содержит короткое имя файла с расширением.

FindHandle is an internal handle used to track find state.

FindData (только для Windows) содержит дополнительную информацию, такую как время создания файла, время последнего доступа, а так же длинное и короткое имя файла. См. тип TWin32FindData.

Илон Маск рекомендует:  margin-top в CSS
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL