Каталог расширений

Популярные теги

3gp       avi       fb2       jpg       mp3       pdf      

Как проверить имя файла delphi


System.IOUtils – удобные утилиты Delphi для работы с файлами и директориями

Начиная с версии XE2 в Delphi появился юнит System.IOUtils, включающий удобные утилиты для работы с файлами и директориями. Предлагаю вместе подробно разобраться с тем, что в юните System.IOUtils имеется и попробовать на примерах как это всё работает.

Всего в юните System.IOUtils вы можете обнаружить три структуры TDirectory, TFile и TPath, содержащие только статические методы. Если вы разрабатываете на .NET, то вы заметите сходство этих трёх структур с классами Directory, File и Path из пространства имён System.IO в .NET. На самом деле в справке Delphi, так и написано, что большинство методов схожи с методами аналогичных классов в .NET. Это даже неплохо, ведь классы Directory, File и Path очень удобные, значит и в Delphi теперь всё должно быть удобно. Но давайте проверять.

Структура TDirectory используется в Delphi для работы с директориями. Она содержит только статические методы. Давайте рассмотрим их.

Создание и удаление директории

Начнём наше знакомство со структурой TDirectory, пожалуй, с методов для создания и удаления директории. Для этого есть соответствующие методы CreateDirectory и Delete. Функция CreateDirectory принимает во входном параметре полный путь к директории и создаёт все недостающие в указанном пути папки. Например, если вы хотите создать директорию «Test3», путь к которой должен быть «C:\Test1\Test2\Test3», а у вас на компьютере есть только директория «C:\Test1», которой нет директории «Test2», то функция CreateDirectory создаст сначала директорию «Test2» в директории «Test1», а затем создаст директорию «Test3» в директории «Test2». Т.е. после вызова этой функции у вас будут все три директории, указанные в пути.

Функция Delete удаляет только последнюю директорию, указанную в пути. Например, если у вас на диске «C:» есть директория «Test1», в ней директория «Test2», и в ней директория «Test3», то чтобы удалить директорию «Test3» в функцию Delete нужно передать полный путь к этой директории, в нашем примере это будет «C:\Test1\Test2\Test3». Также функция Delete умеет рекурсивно удалять вложенные директории и файлы, если второй входной параметр установлен в true.

Вот примеры использования функций CreateDirectory и Delete:

program Project1;   {$APPTYPE CONSOLE}   {$R *.res}   uses SysUtils, IOUtils;   begin try //Создаём директории Test1, Test2 и Test3, если их нет. TDirectory.CreateDirectory('C:\Test1\Test2\Test3'); //Удаляем директорию Test3. TDirectory.Delete('C:\Test1\Test2\Test3'); try //Удаляем директорию Test1. //Директория Test1 не пустая, т.к. в ней есть директория Test2. //Поэтому при вызове метода Delete произойдёт ошибка EInOutError. TDirectory.Delete('C:\Test1'); except on ioError: EInOutError do //Показываем ошибку в консоли. Writeln(ErrOutput, ioError.Message); end; //Удаляем директорию Test1 и рекурсивно все вложенные директории и файлы. TDirectory.Delete('C:\Test1', true); except on E: Exception do Writeln(E.ClassName, ': ', E.Message); end; end.

Проверка существования директории

Чтобы проверить, существует ли директория, у структуры TDirectory есть функция Exists. Первый параметр функции – это путь к директории. Второй необязательный параметр FollowLink учитывается только при использовании символической ссылки. Если нужно проверить только существование символической ссылки на директорию, то нужно установить этот параметр в false, а если нужно проверить наличие всего сразу, т.е. и символической ссылки на директорию и самой директории, то нужно установить этот параметр в true. Вот примеры использования:

program Project1;   {$APPTYPE CONSOLE}   {$R *.res}   uses SysUtils, IOUtils, Shellapi, Classes, Windows; var execInfo: TShellExecuteInfo;   begin try //Проверяем, есть ли директория C:\Test1. //Если директории нет, то функция вернёт false. Writeln(TDirectory.Exists('C:\Test1'));   //Создаём директорию. TDirectory.CreateDirectory('C:\Test1');   //Ещё раз проверяем, есть ли директория C:\Test1. //Теперь директория существует, и функция вернёт true. Writeln(TDirectory.Exists('C:\Test1'));   //Теперь проверяем, существует ли символическая ссылка C:\TestLink. //Если ссылка не существует, то функция вернёт false. Writeln(TDirectory.Exists('C:\TestLink', false));   //Теперь создадим символическую ссылку C:\TestLink на несуществующую директорию C:\Test2. //Для создания символической ссылки нужно обладать правами администратора, //поэтому создавать её будем с помощью утилиты командной строки mklink, //которую будем вызывать от имени администратора. //Чтобы вызвать эту утилиту, придётся сначала создать пакетный файл, //а затем выполнить его. //Итак, сначала создаём пакетный файл с командой mklink. with TStringList.Create do try //Содержимое пакетного файла... Add('mklink /D C:\TestLink C:\Test2'); //Сохраняем пакетный файл. SaveToFile('C:\Test1\tmp.bat'); finally Free; end; //Теперь выполняем пакетный файл от имени администратора. FillChar(execInfo, SizeOf(TShellExecuteInfo), 0); execInfo.cbSize := SizeOf(TShellExecuteInfo); execInfo.lpVerb := PWideChar('runas'); execInfo.lpFile := PWideChar('C:\Test1\tmp.bat'); execInfo.fMask := SEE_MASK_NOCLOSEPROCESS; ShellExecuteEx(@execInfo); //Ждём, пока пакетный файл отработает. WaitForSingleObject(execInfo.hProcess, INFINITE);   //Проверяем, существует ли символическая ссылка C:\TestLink. //Теперь ссылка существует, поэтому функция вернёт true. Writeln(TDirectory.Exists('C:\TestLink', false));   //Проверяем, существует ли символическая ссылка C:\TestLink //и директория C:\Test2, на которую она ссылается. //Ссылка C:\TestLink существует, но директория C:\Test2 - нет, //поэтому функция вернёт false. Writeln(TDirectory.Exists('C:\TestLink', true));   //Создаём директорию C:\Test2. TDirectory.CreateDirectory('C:\Test2');   //Опять проверяем, существует ли символическая ссылка C:\TestLink //и директория C:\Test2, на которую она ссылается. //Теперь ссылка C:\TestLink и директория C:\Test2 существуют, //поэтому функция вернёт true. Writeln(TDirectory.Exists('C:\TestLink', true));   //Удаляем директорию C:\Test1, а заодно и файл tmp.bat. TDirectory.Delete('C:\Test1', true); //Удаляем директорию C:\Test2. TDirectory.Delete('C:\Test2'); //Удаляем символическую ссылку C:\TestLink. DeleteFile('C:\TestLink');   Readln; except on E: Exception do Writeln(E.ClassName, ': ', E.Message); end; end.

Чтение и изменение характеристик директории

В структуре TDirectory для чтения и изменения характеристик директории есть следующие методы:

        • GetAttributes – возвращает атрибуты папки, такие как «только чтение», «системная», «скрытая» и т.п.;
        • SetAttributes – устанавливает новый набор атрибутов директории, такие как «только чтение», «системная», «скрытая» и т.п.;
        • GetCreationTime и GetCreationTimeUtc – возвращают дату и время создания директории;
        • SetCreationTime и SetCreationTimeUtc – устанавливают дату и время создания директории;
        • GetLastAccessTime и GetLastAccessTimeUtc – возвращают дату и время последнего обращения к директории;
        • SetLastAccessTime и SetLastAccessTimeUtc – устанавливают дату и время последнего обращения к директории;
        • GetLastWriteTime и GetLastWriteTimeUtc – возвращают дату и время последней записи в директорию.
        • SetLastWriteTime и SetLastWriteTimeUtc – устанавливают дату и время последней записи в директорию.

Функции, возвращающие и устанавливающие время, в конце имени которых есть суффикс «Utc», возвращают время в формате всемирного координированного времени (UTC).

Теперь рассмотрим примеры:

program Project1;   {$APPTYPE CONSOLE}   {$R *.res}   uses SysUtils, IOUtils, Rtti; var fileAttribute: TFileAttribute;   begin try //Создаём директории Test1, Test2 и Test3, если их нет. TDirectory.CreateDirectory('C:\Test1\Test2\Test3');   //Делаем директорию скрытой, выставляя ей атрибут faHidden. TDirectory.SetAttributes('C:\Test1', [TFileAttribute.faHidden]); //Делаем директорию доступной только для чтения, выставляя ей атрибут faReadOnly. TDirectory.SetAttributes('C:\Test1\Test2\Test3', [TFileAttribute.faReadOnly]); //Отображаем все установленные атрибуты директории Test1. //В результате отобразятся два атрибута: faHidden и faDirectory. //Атрибут faDirectory убрать нельзя, он всегда будет присутствовать у директории. for fileAttribute in TDirectory.GetAttributes('C:\Test1') do Writeln(TRttiEnumerationType.GetName<TFileAttribute>(fileAttribute)); //Отображаем все установленные атрибуты директории Test3. //В результате отобразятся два атрибута: faReadOnly и faDirectory. for fileAttribute in TDirectory.GetAttributes('C:\Test1\Test2\Test3') do Writeln(TRttiEnumerationType.GetName<TFileAttribute>(fileAttribute));   //Выводим дату и время создания директории Test1. //В результате отобразится дата и время на момент создания директории. Writeln(DateTimeToStr(TDirectory.GetCreationTime('C:\Test1'))); //Устанавливаем дату и время создания директории. TDirectory.SetCreationTime('C:\Test1', StrToDateTime('01.02.03 11:12:13')); //Выводим дату и время создания директории Test1. //В результате отобразится 01.02.2003 11:12:13. Writeln(DateTimeToStr(TDirectory.GetCreationTime('C:\Test1'))); //Выводим дату и время создания директории Test1 в формате UTC, т.е. без учёта часового пояса. //В результате отобразится 01.02.2003 8:12:13, т.е. -3 часа по Москве. Writeln(DateTimeToStr(TDirectory.GetCreationTimeUtc('C:\Test1')));   //Выводим дату и время последнего обращения к директории. Writeln(DateTimeToStr(TDirectory.GetLastAccessTime('C:\Test1'))); //Устанавливаем дату и время последнего обращения к директории. TDirectory.SetLastAccessTime('C:\Test1', StrToDateTime('01.02.03 11:12:14')); //Выводим дату и время последнего обращения к директории. //В результате отобразится 01.02.2003 11:12:14. Writeln(DateTimeToStr(TDirectory.GetLastAccessTime('C:\Test1')));   //Выводим дату и время последней записи в директорию. Writeln(DateTimeToStr(TDirectory.GetLastWriteTime('C:\Test1'))); //Устанавливаем дату и время последней записи в директорию. TDirectory.SetLastWriteTime('C:\Test1', StrToDateTime('01.02.03 11:12:15')); //Выводим дату и время последней записи в директорию. //В результате отобразится 01.02.2003 11:12:15. Writeln(DateTimeToStr(TDirectory.GetLastWriteTime('C:\Test1')));   //Удаляем директорию Test1 и рекурсивно все вложенные директории и файлы. TDirectory.Delete('C:\Test1', true); Readln; except on E: Exception do Writeln(E.ClassName, ': ', E.Message); end; end.

Копирование, перемещение и переименование директории

Для копирования директории у структуры TDirectory есть метод Copy, а для перемещения или переименования – метод Move. Перечисленные выше операции производятся с директорией в целом, включая вложенные директории и файлы.

Если директория, в которую происходит копирование, уже существует, то произойдёт слияние существующей директории и директории, которую вы копируете. При этом совпадающие файлы в директории назначения будут удалены,

классика Pascal. Работа с типизированными файлами в Delphi – Delphi в Internet

Удивительно, но факт – запрос “delphi файлы” в Яндексе – это один из самых популярных запросов, касающихся Delphi. Популярнее только “delphi скачать” – видимо ещё не все слышали про такую штуку как Delphi Community Edition. Раз есть в Сети запрос – должен быть и ответ. Посмотрим, что получится в итоге.

Содержание статьи

Классика работы с файлами в Delphi – ключевое слово File

Этот способ, без преувеличения, можно назвать древнейшим способом работы с файлами в Pascal/Delphi. Однако и он до сих пор используется в работе, особенно, если это, например, лабораторная работа по информатике в школе или ВУЗе.

Для определения файловой переменной в Delphi/Pascal используется ключевое слово File. При этом, мы можем определить как типизированный файл, так и не типизированный, например:

type TPerson = record Name: string[20]; Family: string[20]; end;   var UntypedFile: File; //нетипизированный двоичный файл TypedFile: File of TPerson;//типизированный файл

Для типизированного фала мы можем задать тип данных фиксированного размера (ShortString, String[20], Integer, Single и так далее), например, мы можем определить такие типизированные файлы:

 IntFile: File of integer; StringFile: file of single; ShortStringFile: file of ShortString;

Или, как в примере выше использовать для указания типа запись (record), в которой все поля имеют фиксированный размер. Для типизированного файла нельзя указывать типы данных, размер которых не фиксирован, например, вот такие определения файловых переменных недопустимы:

type TIntArr = array of integer;   var StrFile: file of string; //недопустимо - размер string заранее не известен ArrFile: file of TIntArr;//недопустимо - размер динамического массива заранее неизвестен

Более того, даже компилятор Delphi укажет вам на ошибку, сообщив следующее:

[dcc32 Error] E2155 Type ‘string’ needs finalization – not allowed in file type

Определив файловую переменную можно приступать к работе с файлом. Алгоритм работы при этом будет следующим:

  1. Ассоциировать файловую переменную с файлом на диске
  2. Открыть файл
  3. Записать/Прочитать файл
  4. Закрыть файл

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

Работа с типизированными файлами в Delphi

Рассмотрим несколько примеров работы с типизированными файлами в Delphi.
Для начала, рассмотрим вариант работы с типизированным файлом, например, представленном выше:

type TPerson = record Name: string[20]; Family: string[20]; end; var TypedFile: File of TPerson;

Пример №1. Запись данных в типизированный файл Delphi

Запишем в наш файл две записи:

program example_1;   {$APPTYPE CONSOLE}   {$R *.res}   uses System.SysUtils;   type TPerson = record Name: string[20]; Family: string[20]; end;   var TypedFile: File of TPerson; Person: TPerson; begin //связываем файловую переменную с файлом на диске AssignFile(TypedFile,'MyFile.txt'); //открываем файл для записи Rewrite(TypedFile); //задаем имя/фамилию человека Person.Name:='Иван'; Person.Family:='Иванов'; //добавляем запись в файл Write(TypedFile, Person); //задаем имя/фамилию второго человека Person.Name:='Петр'; Person.Family:='Петров'; //записываем в файл Write(TypedFile, Person); //закрываем файл CloseFile(TypedFile);   Readln; end.

Рассмотрим методы, используемые в этом примере:

function AssignFile(var F: File; FileName: String): Integer;

Связывает файловую переменную F с внешним файлом FileName. В качестве второго параметра может задаваться как абсолютный путь к файлу, например, ‘C:/MyFile.txt‘, так и относительный, например, в коде выше файл будет создан рядом с exe-файлом.

procedure Rewrite(var F: File; [ RecSize: Integer]);

Создает новый файл и открывает его. Если внешний файл с таким именем уже существует, он удаляется и на его месте создается новый пустой файл. Если F уже открыт, он сначала закрывается, а затем воссоздается. Текущая позиция файла устанавливается в начале пустого файла.
F – это переменная, связанная с внешним файлом с использованием AssignFile. RecSize – это необязательное выражение, которое можно указывать, только если F является нетипизированным файлом (об этом ниже).

procedure Write([var F: File]; P1; [ ..., PN]); overload;

Используется для записи в типизированный файл. F – файловая переменная, P1..PN – это переменная того же типа, что и тип файла F.

procedure CloseFile(var F: File);

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

В результате выполнения представленного выше кода, рядом с exe-файлом будет создан новый файл MyFile.txt, содержащий две записи, при этом, каждая запись будет иметь фиксированный размер, вне зависимости от фактических имени/фамилии.

Для того, чтобы в delphi не перезаписывать каждый раз файл, а добавлять в конец файла новые записи необходимо открывать типизированные файлы методом Reset. Рассмотрим пример добавления новых записей в типизированные файлы Delphi.

Пример №2. Добавление записей в типизированный файл Delphi

Рассмотрим такой пример Delphi:

program example_2;   {$APPTYPE CONSOLE}   {$R *.res}     uses System.SysUtils;   type TPerson = record Name: string[20]; Family: string[20]; Age: integer; end;   procedure ReadTypedFile; const cStr = '%s %s %d'; var F: File of TPerson; Person: TPerson; begin AssignFile(F, 'MyFile.txt'); Reset(F); while not Eof(F) do begin Read(F, Person); Writeln(Format(cStr, [Person.Name, Person.Family, Person.Age])); end; end;   procedure AppendTypedFile; var F: file of TPerson; Person: TPerson; begin AssignFile(F, 'MyFile.txt'); // открываем файл для записи Reset(F); Seek(F, FileSize(F)); // задаем имя/фамилию человека Writeln('Введите имя: '); Readln(Person.Name); Writeln('Введите фамилию: '); Readln(Person.Family); Writeln('Введите возраст: '); Readln(Person.Age); // добавляем запись в файл Write(F, Person); // закрываем файл CloseFile(F); end;   var TypedFile: File of TPerson; Person: TPerson; DoAppend: integer;   begin if not FileExists('MyFile.txt') then begin AssignFile(TypedFile, 'MyFile.txt'); // открываем файл для записи Rewrite(TypedFile); // закрываем файл CloseFile(TypedFile); end;   // связываем файловую переменную с файлом на диске repeat Writeln('Добавить в файл запись: 1 - Да; 2 - Нет'); Readln(DoAppend); case DoAppend of 1: AppendTypedFile; 2: break; end; until DoAppend = 0; //читаем все записи из типизированного файла ReadTypedFile; Readln; end.

Разберемся с тем, что здесь делается. Во-первых, условие:

if not FileExists('MyFile.txt') then

проверяет, существует ли файл на диске. Метод FileExist имеет следующее описание:

function FileExists(const FileName: string; FollowLink: Boolean = True): Boolean;

FileName – имя файла, существование которого необходимо проверить. Второй параметр – FollowLink учитывается только при использовании символической ссылки. То есть, если нужно проверить только наличие символической ссылки на файл, то параметр FollowLink устанавливается в False, а если нужно проверить наличие и символической ссылки на файл и самого файла, то FollowLink устанавливается в True (значение по умолчанию).

Таким образом, в нашем примере, если файла нет на диске то он создается пустым. Далее выполняется цикл:

repeat Writeln('Добавить в файл запись: 1 - Да; 2 - Нет'); Readln(DoAppend); case DoAppend of 1: AppendTypedFile; 2: break; end; until DoAppend = 0;

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

procedure AppendTypedFile; var F: file of TPerson; Person: TPerson; begin AssignFile(F, 'MyFile.txt'); // открываем файл для записи Reset(F); //смещаемся в конец файла Seek(F, FileSize(F)); // задаем имя/фамилию человека Writeln('Введите имя: '); Readln(Person.Name); Writeln('Введите фамилию: '); Readln(Person.Family); Writeln('Введите возраст: '); Readln(Person.Age); // добавляем запись в файл Write(F, Person); // закрываем файл CloseFile(F); end;

Здесь, в принципе, весь алгоритм расписан в комментариях к процедуре.
Метод Reset не воссоздает файл снова, как Rewrite, а открывает его для чтения/записи (в случае двоичных файлов). Что касается метода Seek, то он имеет следующее описание:

procedure Seek(var F: File; N: Integer);

F – файловая переменная, ассоциированная с файлом на диске, N – номер записи в файле (первый номер – 0). Чтобы переместиться сразу в конец файла, мы сделали такой вызов:

где FileSize – это метод Delphi имеющий следующее описание:

function FileSize(var F: File): Integer;

В случае использования типизированных файлов эта функция возвращает количество записей в файле.

После того, как пользователь вводит что-то кроме 1 срабатывает метод ReadTypedFile – чтение всех записей из файла:

procedure ReadTypedFile; const cStr = '%s %s %d'; var F: File of TPerson; Person: TPerson; begin AssignFile(F, 'MyFile.txt'); Reset(F); while not Eof(F) do begin Read(F, Person); Writeln(Format(cStr, [Person.Name, Person.Family, Person.Age])); end; end;

Здесь мы, опять же, открываем файл методом Reset и в цикле while..do проходим по всем записям файла, пока не дойдем до конца. Здесь мы использовали два новых метода Delphi:

function Eof([var F: File]): Boolean; overload;

Eof возвращает True, если текущая позиция файла находится за последним символом файла или файл пуст. В противном случае Eof возвращает False.
По аналогии с методом Write, метод Read производит чтение очередной записи из файла и имеет следующее описание:

procedure Read(var F: File; V1; [ ..., VN]);

Результат работы нашего примера может быть следующим:

Ещё одним полезным методом для работы с типизированными файлами может быть процедура Truncate:

procedure Truncate(var F: File);

Удаляет все записи после текущей позиции файла. Вызовите Truncate в коде Delphi, чтобы текущая позиция файла стала концом файла (Eof (F) вернет true).
Рассмотрим пример использования этой процедуры.

Пример №3. Удаление последних записей типизированного файла в Delphi

Воспользуемся файлом, созданным в предыдущем примере и удалим из него две последние записи:

program example_3;   {$APPTYPE CONSOLE}   {$R *.res}     uses System.SysUtils;   type TPerson = record Name: string[20]; Family: string[20]; Age: integer; end;   procedure ReadTypedFile; const cStr = '%s %s %d'; var F: File of TPerson; Person: TPerson; begin AssignFile(F, 'MyFile.txt'); Reset(F); while not Eof(F) do begin Read(F, Person); Writeln(Format(cStr, [Person.Name, Person.Family, Person.Age])); end; end;   var TypedFile: File of TPerson; Person: TPerson; Count: integer; DoErase: integer; begin AssignFile(TypedFile,'MyFile.txt'); Reset(TypedFile); Count:=FileSize(TypedFile); if Count&lt;2 then begin Writeln('Количество записей в файле меньше двух. Стереть все записи? 1 - Да; 2 - Нет'); Readln(DoErase); if DoErase=1 then Truncate(TypedFile); end else begin Seek(TypedFile, Count-2); Truncate(TypedFile); end; //читаем все записи из типизированного файла ReadTypedFile; Readln; end.

В этом примере мы делаем следующее:

  1. Открываем файл существующий AssignFile/Reset
  2. Определяем количество записей в файле (Count:=FileSize(TypedFile))
  3. Если количество записей меньше двух, то спрашиваем у пользователя стереть ли все записи и, в случае положительного ответа, вызываем метод Tuncate
  4. Если количество записей в файле больше двух, то смещаемся на нужную нам позицию в файле (Seek(TypedFile, Count-2)) и затираем две последние записи методом Truncate.

Подведем итог

Для работы с типизированными файлами в Delphi в самом общем случае нам необходимо выполнить следующую последовательность операций:

  1. Определить тип записей в файле – это могут быть стандартные типы данных Delphi с фиксированным размером: ShortString, integer, single и так далее или собственные типы данных, например, записи (record), но, в этом случае, главное условие – размер записи должен быть фиксированным.
  2. В коде Delphi/Pascal определить файловую переменную, используя ключевое слово file и, указав тип записей файла, определенный в пункте 1.
  3. Ассоциировать файловую переменную с внешним файлом на диске, используя метод AssignFile.
  4. Открыть файл для чтения/записи, используя методы Rewrite/Reset.
  5. Чтобы сделать в файл очередную запись используем метод Write, для чтения очередной записи из файла – используем метод Read.
  6. Закрыть файл методом CloseFile.

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

Функции и процедуры для работы с типизированными файлами в Delphi/Pascal

Метод Краткое описание
procedure AssignFile(var F: File; FileName: String)
Ассоциирует файловую переменную F с внешним файлом FileName. Переменная FileName может быть как именем файла, так и содержать полный путь к файлу на диске.
procedure CloseFile(var F: File);
Закрывает файл, ассоциированный с переменной F и освобождает переменную для дальнейшего использования.
function Eof(var F: File): Boolean;
Проверяет конец файла и возвращает True, если файловый указатель стоит в конце файла. В случае записи True означает, что очередной компонент будет добавлен в конец файла, при чтении – что файл прочтен полностью.
procedure Erase(var F: File);
Удаляет внешний файл, связанный с файловой переменной F. Перед удалением файла его необходимо закрыть методом CloseFile.
 
function FilePos(var F: File): Integer;
Возвращает текущую позицию в файле. В коде Delphi используйте FilePos для файловой переменной открытого файла, чтобы определить текущую позицию в файле. Если текущая позиция в файле находится в начале, FilePos возвращает 0.
 
function FileSize(var F: File): Integer;

 

Для типизированных файлов возвращает количество записей в файле.
procedure Read(var F: File; V1; [ ..., VN]);
Считывает из типизированного файла одну или несколько записей
procedure Rename(var F: File; Newname: String);
Переименовывает файл, ассоциированный с переменной F
procedure Reset(var F: File; [ RecSize: Integer]);
Открывает файл для чтения. Второй параметр RecSize указывается в случае использования нетипизированных файлов и указывает размер записи в файле в байтах
procedure Rewrite(var F: File; [ RecSize: Integer]);
Воссоздает файл. Если файл существует, то Rewrite его удалит, а затем создаст снова. RecSize используется для нетипизированных файлов
procedure Seek(var F: File; N: Integer);
Перемещает текущую позицию в файле к записи N (первая запись имеет номер 0)
procedure Truncate(var F: File);
Стирает из файла данные, расположенные за текущей позицией
procedure Write([var F: File]; P1; [ ..., PN]);
Записывает в файл F одну или несколько записей
Take Our Poll

0 0 голос

Рейтинг статьи

работа с TPath в Delphi 2010. Заключение. – Delphi в Internet

Итак, сегодня третья заключительная часть краткого обзора нового модуля Delphi 2010 – IOUtils.pas. Рассматриваем работу с классом TPath.
В начале кратко о том, для чего можно использовать класс. Судя по составу методов, TPath можно использовать для проверки путей к файлам и директориям, извлекать из пути имя и расширения файла, проверять правильность составления пути к файла и директориям и т.д. Рассмотрим эти методы более подробно.

1. Проверка правильности пути и имени файла

Для проверки валидности символов в пути и имени файла используются следующие методы:

class function IsValidPathChar(const AChar: Char): Boolean; inline; static; class function IsValidFileNameChar(const AChar: Char): Boolean; inline; static; class function HasValidPathChars(const Path: string; const UseWildcards: Boolean): Boolean; static; class function HasValidFileNameChars(const FileName: string; const UseWildcards: Boolean): Boolean; static;

При этом IsValidPathChar провряет валидность символа в пути и если символ – это:

(#0..#31, '"', '&lt;', '&gt;', '|')

то функция возвращает False.
Соответственно IsValidFileNameChar возвращает false, если символ:

( #0..#31, '"', '*', '/', '"', '&lt;', '&gt;', '?', '\', '|');

Соответственно методы HasValidPathChars и HasValidFileNameChars проверяют уже всю строку, а не отдельный символ. При этом UseWildcards определяет будут ли учитываться символы “дикой карты” при проверке.
Для HasValidPathChars такими символави являются:

('*', ':' ,'?' ,'/', '\')

а для HasValidFileNameChars

Если при проверке строки в ней находится один или несколько символов дикой карты, то пезультат всё равно будет true.

Работа с префиксами

Следующие методы проверяют какой путь задан в Path.

class function IsUNCRooted(const Path: string): Boolean; static; class function IsUNCPath(const Path: string): Boolean; inline; static; class function IsDriveRooted(const Path: string): Boolean; static; class function DriveExists(const Path: string): Boolean; static;

Соответственно, первые два метода относятся к проверке того является ли Path UNC-путем вида:

\\server\folder\path

Третий метод и четвертый определяют является ли путь обчным локальным вида:

C:/Folder/path

и содержит ли путь имя локального диска.

Работа файлами и папкой Temp

Рассмотрим несколько методов, которые можно использовать для работы с файлами:

class function GetRandomFileName: string; static; class function GetTempFileName: string; static; class function GetTempPath: string; static;

Метод GetRandomFileName, как понятно из названия, возвращает абсолютно случайное название файла, например:

TdjfgRTgG.QFH

GetTempFileName возвращает имя, наиболее подходящее для временного, т.е. вида:

tmp????.tmp

Соответственно GetTempPath возвращает путь к директории для хранения временных файлов.
Остальные методы класса TPath так или иначе пересекаются в своей работе с метоами клссов TFile и TDirectory, например, получают атрибуты директории, расширение файла и т.д.
Вот пожалуй очень кратко о том, какие возможности предоставляет нам новый модуль Delphi 2010 – IOUtils.pas. В целом классы TFile, TPath и TDirectory обхединяют в себе все те давно известные нам методы, наподобие ExtractFileName и т.д. которые мы использовали ранее. Ничего нового в принципе нет. Использовать или нет этот модуль в своих разработках – это как обычно, дело каждого. Как по мне, так с IOUtils работа с файлами и директориями становится более простой и понятной.

0 0 голос

Рейтинг статьи

Delphi 7, TFileStream не может открывать файлы со специальными символами

Переполнение стека
  1. Около
  2. Товары
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся
.

Как проверить, запущен ли процесс с помощью Delphi?

Переполнение стека
  1. Около
  2. Товары
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями wi
.

delphi - XE4: как изменить базу имен выходных файлов exe на платформе?

Переполнение стека
  1. Около
  2. Товары
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики &
.

Как проверить, заполнено ли Memo в Delphi

Переполнение стека
  1. Около
  2. Товары
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
.

Смотрите также