findfirst delphi коды ошибок
Findfirst delphi коды ошибок
Attributes определяют файлы, для поиска в дополнение к правильным файлам.
?: Соответствие любого одного символа *: Соответствие 0, 1 или более символов
Attributes могут быть установлены следующим образом:
faAnyFile: Любой файл
faReadOnly: Файлы nолько для чтения
faHidden: Скрытые файлы
faSysFile: Системные файлы
faVolumeID: файлы идентификатора объема
faDirectory: Файлы каталоги
faArchive: Архивные файлы
Вы можете установить один или более из вышеупомянутых атрибутов, связывая их.
Запись SearchResult включает много полей. Некоторые используются последующими запросами к FindNext. Другие доступны вашей программе:
Name: Из длинного названия найденного файла
Size: Размер файла в байтах
Time: Дата/время последнего изменения файла
Attr: атрибуты файла (как выше)
Если FileMask не содержит никакой информации пути, то поиск будет проводится в текущем каталоге.
Поскольку параметр Attributes определяет дополнительные типа файлов для поиска, Вы должны фильтровать результаты Attr значение, чтобы выбрать только желательные типы файлов.
? | : Match any one character |
* | : Match 0, 1 or more characters |
The Attributes may be set as follows:
faAnyFile | : Any file |
faReadOnly | : Read-only files |
faHidden | : Hidden files |
faSysFile | : System files |
faVolumeID | : Volume ID files |
faDirectory | : Directory files |
faArchive | : Archive files |
You may set Attributes from one or more of the above by concatenating them.
The SearchResult record comprises many fields. Some are used by subsequent calls to FindNext. Others are available to your program :
Name | : Of the long name of the file found |
Size | : The size of the file in bytes |
Time | : Last modified date/time of the file |
Attr | : The file attributes (as above) |
If the FileMask contains no path information, then the search is in the current directory.
System.SysUtils.FindFirst
Contents
Properties
Description
Searches for the first instance of a file name with a given set of attributes in a specified directory.
FindFirst searches the directory specified by Path for the first file that matches the file name implied by Path and the attributes specified by the Attr parameter. The result is returned in the F parameter. Use the fields of this search record to extract the needed information. FindFirst returns 0 if a file was successfully located, otherwise, it returns an error code.
The Path constant parameter is the directory and file name mask, including wildcard characters. For example, ‘.\test\*.*’ specifies all files in the test subdirectory (on Windows).
The Attr parameter specifies the special files to include in addition to all normal files. Choose from these file attribute constants when specifying the Attr parameter.
Identifies an invalid file.
Identifies read-only files or directories.
Identifies hidden files or directories.
Identifies system files or directories.
Identifies a directory.
Identifies Windows archived files.
Identifies normal files.
Identifies temporary files or directories.
Specifies only symbolic link file types.
Identifies a compressed file or directory.
Identifies an encrypted file or directory.
Reserved for system use.
Specifies any file type.
Attributes can be combined by adding (Delphi) or or-ing (C++) their constants or values. For example, to search for read-only and hidden files in addition to normal files, pass (faReadOnly + faHidden) in Delphi or (faReadOnly | faHidden) in C++ as the Attr parameter. To include only normal files, pass zero for the Attr parameter.
Note: FindFirst allocates resources (memory) that must be released by calling FindClose.
Note: Some of the file attribute constants are not valid on all platforms. For example, faVolumeID and faArchive do not work on MAC OS.
Программный поиск файлов на Delphi (исходники)
В этом уроке мы с вами ознакомимся с основными принципами программной организации поиска файлов. Для начала определимся, зачем нам это может быть нужно. Например, вам нужно при запуске программы на выполнение просканировать определенный каталог на присутствие DOC файлов, и при наличии таковых открыть их на редактирование или напечатать. А как вам такая идея: фоновый поиск EXE файла в сети, и при обнаружении новой версии, автоматическое обновление.
Вспомним правила поиска файлов. Вы можете задать как имя искомого файла, так и его маску, если название неизвестно или необходимо найти несколько. Т.е. применяя специальный шаблон поиска, вы можете организовать условия выборки найденных файлов. Сразу оговорюсь, что поиск можно применять как к файлам, так и к каталогам. Будем их называть элементами файловой системы. В шаблон маски искомых элементов может входить:
Например, вы ищите все текстовые файлы с расширением TXT. В поле имени искомого файла вам нужно ввести «*.TXT» (пишется без кавычек) и система найдет все такие файлы в указанном диске или каталоге. Если вам надо найти все файлы с названием semen, то в поле поиска файла нужно ввести «semen.*». Если вам нужно найти элементы с третьей буквой k и с первой буквой t в расширении, то вводите «??k*.t*». Здесь знак вопроса указывает на любой символ, третьим символом по порядку идет буква k, далее название файла (каталога) может состоять из любого количества букв и цифр, указываем звездочку. В расширении первая буква t, дальше следует любое расширение.
Примечание: файлы и каталоги в операционной системе windows ищутся без учета регистра, т.е. строчние и прописные буквы не различаются.
Теперь рассмотрим программный поиск файлов с помощью языка программирования object pascal.
Вся организация цикла поиска, а именно это и есть цикл с продолжением поиска, сводится к:
Функция FindFirst
Атрибуты искомого элемента это пользовательские или системные атрибуты, которые может иметь файл (каталог, метка диска). Вот их перечень:
Если вам нужно искать только элементы, имеющие атрибут «каталог» и «скрытый», то можно применить знак математического сложения, например faDirectory + faHidden.
Поисковая переменная имеет тип TSearchRec. В нее, при успешном результате поиска, будет занесены все необходимые данные о найденном файловом элементе.
Поскольку FindFirst является функцией, то она должна сама возвращать некоторое значение. Это значение имеет тип Integer и означает результат поиска файла (код ошибки поиска). Если файл найден, то принимает нулевое значение.
Функция FindNext
Эта функция продолжает поиск, заданный в функции FindNext. Возвращает значение результата поиска (нулевое в случае успешного поиска).
Процедура FindClose
Закрывает поиск и освобождает память, выделенную системой под поиск.
Теперь рассмотрим пример. Допустим, нам надо найти все файлы и каталоги в каталоге DELPHI, находящийся на диске C:. В дальнейшем, вы можете самостоятельно, изменяя маску, менять условия поиска. Для формы с компонентом ListBox1 и кнопкой Button1 реакция на OnClick по кнопке:
Представленный пример кода, в принципе, является основой для организации более углубленного поиска, поиска файлов по времени создания, по содержащимся словам. Если вы запустите эту программу на выполнение, то при нажатии на кнопку Button1 вы увидите в списке в первой и второй строке элементы «.» и «..». Это элементы, имеющие атрибут «каталог». Первый содержит связь с корневым каталогом диска, второй содержит связь к каталогом верхнего уровня. Со вторым вы встречаетесь в дисковых командных оболочках, например нортон, когда выбираете каталог «..» и нажимаете на «ввод». Тем самым вы попадаете в каталог на уровень выше. Естественно, в нашей поисковой программе такие элементы не надо вносить в список, поэтому мы игнорируем их нахождение. Исправляем процедуру нажатия на кнопку Button1:
В этом случае, при нахождении каталога с именем «.» или с именем «..» программа продолжит обработку цикла поиска без вывода найденного имени элемента в компонент списка ListBox1.
Теперь рассмотрим тип TSearchRec. Он имеет в себе несколько полезных свойств:
Все вышеперечисленные свойства мы уже рассмотрели или они понятны сразу, за исключением свойства Time. Оно имеет тип Integer и содержит в себе упакованное значение даты и времени создания файла. Распаковка производится с помощью функции FileDateToDateTime, которая в результате возвращает значение даты и времени.
Теперь добавим в нашу форму компонент DateTimePicher1 (страница Win32) и допишем несколько строк.
Как вы уже заметили, мы отбираем файлы и каталоги по дате создания, начиная с указанной в компоненте DateTimePicker1.
Теперь попробуем организовать поиск файлов во всех вложенных каталогах. Это не так просто, как может показаться на первый взгляд. Нам придется вручную организовывать весь цикл входа-выхода из каталога, перебор файлов. Немного сложноватый материал, но возможно те из вас, кто уже работал с языком программирования pascal или другим, знакомы с технологией многократности и многовложенности использования одного и того же программного кода. Коротко объясню алгоритм работы такой программы.
Таким образом, сколько витков программа наматывает на так называемый клубок, столько витков она и размотает. Программа на выполнении проходит все дерево вложенных каталогов, выполняя один и тот же кусок программного кода! И при этом данные условий поиска не перепутываются, и для каждой уникальной процедуры они сохраняются.
Рассмотрим пример. Создайте новый проект. Для создания отдельной процедуры поиска нам нужно объявить ее в соответствующем разделе (создаем ее вручную, поэтому и самостоятельно объявляем).
В разделе public пишем строку:
А в разделе кода программы, до слова «end.» вставляем пустой каркас процедуры
На форму вставляем компонент списка ListBox1, Button1, Edit1. Для компонента Edit1 свойство Text устанавливаем в «c:\delphi\». Обратите внимание на последний символ, знак «\», присутствие которого в начальном пути поиска обязательно. Дальше процедура OnClick для кнопки Button1 выглядит следующим образом:
Созданная нами вручную процедура поиска:
Если вы в компоненте Edit1 в качестве начального условия поиска файлов зададите корневую папку диска, например «С:\», то вы получите полный перечень всех файлов на данном диске. Обратите внимание на скорость поиска файлов и скорость работы вашей программы.
Findfirst delphi коды ошибок
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TSearchRec = record
Time: Integer;
Size: Integer;
Attr: Integer;
Name: TFileName;
ExcludeAttr: Integer;
FindHandle: THandle;
FindData: TWin32FindData;
end;
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
Edit2: TEdit;
procedure Button1Click(Sender: TObject);
private
< Private declarations >
public
< Public declarations >
end;
procedure TForm1.Button1Click(Sender: TObject);
var
sr:TSearchRec;
Attr: Integer;
begin
Attr:=faDirectory;
if FindFirst(Edit1.Text,Attr,sr) = 0 then
Edit2.Text:= IntToStr(sr.Size);
FindClose(sr);
end;
← →
P.N.P. © ( 2005-03-14 20:34 ) [1]
Здесь все в порядке, видимо ошибка где-то далее.
← →
begin. end © ( 2005-03-14 20:34 ) [2]
В приведённом коде ошибок не видно.
>type
> TSearchRec = record
> Time: Integer;
> Size: Integer;
> Attr: Integer;
> Name: TFileName;
> ExcludeAttr: Integer;
> FindHandle: THandle;
> FindData: TWin32FindData;
> end;
Выкинь это сейчас же 🙂 Эта структура определена в SysUtils, и именно ее переопределение и приводит к ошибке компиляции. Проверено экспериментально.
P.S. А в следующий раз пиши, на какой строке ошибка возникает.
← →
P.N.P. © ( 2005-03-14 20:44 ) [6]
>Virgo_Style © (14.03.05 20:43) [4]
Точно!
и как я проглядел 🙂
← →
begin. end © ( 2005-03-14 20:45 ) [7]
всем спасибо за советы. и действительно заворкало.
- тинькофф бонусы кэшбэк условия
- fallout 4 коды на предметы для крафта