- •Имена unc
- •1.1.2. Процедуры и функции win32 для работы с файлами
- •1. Создание или открытие файла
- •2. Запись в файл
- •3.Чтение из файла
- •4. Закрытие файла
- •1.1.3. Пример программы, использующей функции win32 для доступа к файлам и каталогам
- •1.1.4. Функции delphi для работы с файлами
- •1. Связывание логического и физического имен файлов
- •2. Типы файлов
- •2. Открытие файла
- •4. Чтение и запись текстовых файлов
- •5. Чтение и запись типизированных файлов
- •6. Чтение и запись нетипизированных файлов
- •7. Закрытие файлов
- •8. Проверка окончания файла
- •9. Файловый ввод/вывод с помощью компонентов
- •10. Обработка ошибок при работе с файлами в delphi
- •1.1.5. Пример программы, использующей функции delphi для доступа к файлам и каталогам
- •1.2. Задание к лабораторной работе
- •Контрольные вопросы
2. Запись в файл
Для записи данных используется функция WriteFile, имеющая следующий синтаксис:
function WriteFile (
hFile: THandle;
const Buffer;
nNumberOfBytesToWrite: DWORD;
var lpNumberOfBytesWritten: DWORD;
lpOverlapped: POverlapped
): BOOL; stdcall;
где:
параметр hFile - описатель (дескриптор) файла;
параметр Buffer – указывает на буфер, в который помещаются данные, записываемые в файл;
параметр nNumberOfBytesToWrite определяет, сколько байт следует записать в файл;
параметр lpNumberOfBytesWritten возвращает количество фактически записанных байт;
параметр lpOverlapped используется для асинхронного ввода/вывода. При синхронном вводе/выводе данный параметр устанавливается в nil;
функция WriteFile возвращает TRUE в случае успеха.
3.Чтение из файла
Для чтения данных используется функция ReadFile, которая имеет следующий синтаксис:
function ReadFile (
hFile: THandle;
var Buffer;
nNumberOfBytesToRead: DWORD;
var lpNumberOfBytesRead: DWORD;
lpOverlapped: POverlapped ): BOOL; stdcall;
где:
параметр hFile - дескриптор файла;
параметр Buffer – указывает на буфер, в который помещаются данные, считываемые из файла;
параметр nNumberOfBytesToRead определяет, сколько байт следует прочитать из файла;
параметр lpNumberOfBytesRead возвращает количество фактически считанных байт;
параметр lpOverlapped используется для асинхронного ввода/вывода. При синхронном вводе/выводе данный параметр устанавливается в nil;
функция ReadFile возвращает TRUE в случае успеха.
4. Закрытие файла
Для закрытия файла используется функция CloseHandle, которая имеет следующий синтаксис:
function CloseHandle (hObject: THandle): BOOL; stdcall;
Где параметр hObject - дескриптор файла
1.1.3. Пример программы, использующей функции win32 для доступа к файлам и каталогам
Программа выполняет следующие действия:
-
создает файл на удаленном компьютере;
-
записывает в файл 14 байт и закрывает файл;
-
открывает файл;
-
читает содержимое файла и закрывает файл.
Код программы:
Var
FileHandle: THANDLE ;
BytesWritten,BytesRead: Cardinal ;
s:Array[1..50] of char;
begin
// Получить дескриптор \\Myself\C:\sample.txt
FileHandle:=CreateFile('\\myself\C:\Sample.txt',
GENERIC_WRITE or GENERIC_READ,
FILE_SHARE_READ or FILE_SHARE_WRITE, Nil,
CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
If FileHandle=INVALID_HANDLE_VALUE
then ShowMessageFmt('При создании файла произошла ошибка %d ',
[GetLastError()])
else
// Записать 14 байт в новый файл
if (WriteFile(FileHandle, 'This is a test',14,BytesWritten, Nil)= False)
then ShowMessageFmt('При записи в файл произошла ошибка %d',
[GetLastError()])
else
if (CloseHandle(FileHandle) = False)
then ShowMessageFmt('При закрытии файла произошла ошибка %d', [GetLastError()]);
// Чтение из файла
FileHandle:=CreateFile('\\myself\C:\Sample.txt',
GENERIC_WRITE or GENERIC_READ,
FILE_SHARE_READ or FILE_SHARE_WRITE, Nil,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
If FileHandle=INVALID_HANDLE_VALUE
then ShowMessageFmt('При открытии файла произошла ошибка %d ',
[GetLastError()])
else
// Чтение из файла
If (ReadFile(FileHandle, s,14,BytesRead, Nil)= False)
then ShowMessageFmt('При чтении из файла произошла ошибка %d',
[GetLastError()])
else
begin
ShowMessage(s);
if (CloseHandle(FileHandle) = False)
then ShowMessageFmt('При закрытии файла произошла ошибка %d',
[GetLastError()]);
end;
end;