Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПРАКТИЧЕСКАЯ РАБОТА Компьютерные сети_2_1.doc
Скачиваний:
4
Добавлен:
16.11.2018
Размер:
142.85 Кб
Скачать

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;