Урок 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.