Урок 22 - Принцип работы с файлами

  В этом уроке изучим принцип работы с файлами.

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

   function FileCreate(const FileName: String): integer;

   Создаёт файл в указанном пути FileName и возвращает индекс созданного файла. В случае ошибки при создании, она вернет -1.

   function FileOpen(const FileName: String; Mode: LongWord): integer;

   Открывает файл в заданном пути FileName с параметрами Mode, она также в случае ошибки вернет -1. Параметр Mode может принимать одно из следующих значений:

  • fmOpenRead - открытие только на чтение
  • fmOpenWrite - открытие только на запись
  • fmOpenReadWrite - открытие и на чтение и на запись


   function FileRead(handle: integer; var Buffer; Count: integer): integer;

   Читает открытый или созданный файл. Вместо пути она принимает индекс файла handle. Buffer - куда будет записано содержимое. Count - количество байтов которое нужно прочитать.

   function FileWrite(handle: integer; var Buffer; Count: integer): integer;

   Аналогичная функция чтению, но вместо чтения она записывает содержимое размером Count (в байтах) переменной Buffer в файл.

   function FileClose(handle: integer);

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

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

   Осуществляет поиск файла Name в одной или более папках DirList, отделённых друг от друга точкой с запятой. Необходимо указывать не только название папки, но и полный адрес этой папки.
Имя файла может быть, как файловым именем, так и полным адресом файла.
Если файл будет найден, то возвращается полный адрес файла включая имя файла, в случае не нахождения искомого файла будет возвращена пустая строка.

   ПРЕДУПРЕЖДЕНИЕ: ВСЕГДА сначала поиск будет проходить в текущей папке, независимо от перечисленных директорий. Если файл обнаруживается там, то путь файла возращён не будет, а только имя файла.

   function FileSeek(Handle, Offset, Origin: Integer): Integer;

   Устанавливает позицию для чтения и записи (в байтах) для открытого файла и возвращает новую позицию в файле (байтовое смещение от начала файла). В ниже перечислены возможные значения параметра Origin. Чтобы определить текущую позицию в файле, передайте Origin значение File_Current и Offset, равное нулю.
  • File_Begin (0) - Смещение (offset) рассчитывается относительно начала файла
  • File_Current (1) - Смещение рассчитывается относительно текущей позиции в файле
  • File_End (2) - Смещение рассчитывается относительно конца файла


   Все с теорией мы покончили, теперь что-нибудь считаем. вытащим на форму 2 кнопки и Memo и напишем в обработчике события 1 кнопки OnClick следующий код:
procedure TForm1.Button1Click(Sender: TObject);
var
  F: integer;  //наш файл
  Str: string[8]; //Строка которую мы будем писать
begin
  F:= FileCreate('D:/1.txt'); //Создаём файл 
  FileWrite(F, '123456789', SizeOf(str)); //Записываем в него строку "123456789"
  FileClose(F); //Закрываем файл
end;
   функция SizeOf возвращает размер типа или самой переменно в байтах, т.к. заранее размер строки неизвестен. скомпилируем и нажмем кнопочку.

Результат


   Теперь прочитаем это. создаём обработчик события 2 кнопки OnClick и пишем код:
procedure TForm1.Button2Click(Sender: TObject);
var
  F: integer;  //наш файл
  Str: string[8]; //Строка в которую мы сохранять
begin
  F:= FileOpen('D:/MyGame/1.txt', fmOpenRead); //открываем файл на чтение
  FileRead(F, Str, SizeOf(str));  //читаем 
  Memo1.Text:=Str;  //присваиваем memo нашу строку
  FileClose(F);  //Закрываем файл
end;


Результат


Удачи!
Встретимся в следующем уроке!




Добавил(а): Life Jumb Дата: 2013-08-25
пробовал другие значения не получилось!



Добавил(а): Noblesse Дата: 2014-03-26
спасибо за Ваши уроки)))



Добавил(а): eltgm Дата: 2014-06-18
не понял урок(и примеры не заработали



Добавил(а): belogod Дата: 2014-08-06
Отличные уроки. Главное не спешить, и вдумываться. И всё будет понятно))



Добавил(а): spyman_xx Дата: 2014-10-07



Добавил(а): Siruza Дата: 2015-06-15
Str: string[8]; а что означает 8 в квадратных скобках?



Добавил(а): Admin Дата: 2015-06-21
var s: string[n]; n - максимально возможная длина строки - целое число в диапазоне 1..255. Если этот параметр опущен, то по умолчанию он принимается равным 255.



Добавил(а): N1Tron1X Дата: 2015-07-13
Запись в текстовик 123456789 - получается ересь) При длине строки 8 пишется не вся строка тк между цифрами вставляются пробелы, при длине строки 90 (взял просто так) - после цифр следуют символы Г Ј Фј 4 мБ ј] ґ0] °л@ 0] Hд@ ј0] p6A



Добавил(а): N1Tron1X Дата: 2015-07-13
Подскажите куда копать. Кодировка не та?



Добавил(а): Admin Дата: 2015-07-20
Функции, представленные в данном уроке записывают в файл бинарные значения и предназначены для записи и чтения в делфи. То есть если открыть такие файлы в блокноте - получается "ересь". Если хотите открывать текст в блокноте, используйте функции Assing, Reset и Writeln.



Добавил(а): beka21 Дата: 2016-01-26
Admin Where is Link For Next Page....



Добавил(а): Admin Дата: 2016-02-07
beka21, fixed



Добавил(а): shukrona.normatova Дата: 2016-07-22
Здравствуйте. Пожалуйста, приведите какой нибудь конкретный пример. Заранее спасибо)



Добавил(а): Byka Дата: 2017-12-16
Уважаемые гуру перелопатил весь интернет , но так и не нашел ответа. Если возможно , то сделайте урок по работе в делфи с каталогами и папками. Задача 1 есть каталог( например диск:папка 1 папка 2user) с вложенными папками и конечная папка у пользователей имеет разные имена и может находиться на разных дисках Простая задача 1 Скопировать содержание конечной папки 2 Создать в директории где лежит программа новый каталог и каждый раз при копировании надо добавлять новую папку в созданный каталог с порядковым номером + название , которое вводит пользователь 3 получить листинг папок из каталога , созданным программой и при выборе папки надо заменить содержимое конечной папки из которой копировали , на содержимое выбранной папки. Задача решается командными файлами элементарно, но хочется создать приложение.... содержимое конечной папки 3 файла - 2 текстовых *.txt и один *.rf В делфи нет встроенной функции для работы с папками нет и уроков в интернете и все уроки сводятся к копированию файлов или копированию символов из строк... Помогите пожалуйста))



Добавил(а): ilya5338k Дата: 2018-07-05
так и не понял что возвращают функции FileOpen и FileCreate


    No results found.
Отменить.