Для выполнения операций с файлами, папками и дисками в ОС Windows служат следующие системные функции Win32API:
CreateDirectory(
LPCTSTR lpPathName, // указатель на буфер, в котором записано наименование создаваемой директории
LPSECURITY_ATTRIBUTES lpSecurityAttributes //привилегии создаваемой директории
) – создание директории.
Пример:
result:=CreateDirectory('A:\TESTDIR', nil);//создаем директорию
if not result then
MessageDlg('Невозможно создать каталоги!'+#10#13+'Такие каталоги существуют или диск защищен от записи!',
mtConfirmation, [mbYes], 0)
else
begin
SetCurrentDirectory('A:\TESTDIR');
CreateDirectory('A:\TESTDIR\NEWDIR', nil);
end;
OpenFile(
LPCSTR lpFileName, // указатель на имя создаваемого файла
LPOFSTRUCT lpReOpenBuff,
UINT uStyle // действия и атрибуты
) - создание файла, используется также для открытия, записи, добавления и т.д. в зависимости от параметра uStyle.
Пример:
begin
MyFile:=OpenFile('A:\TESTDIR\File1.txt',ReOpenBuff,OF_CREATE);
buffer:='Текстовая строка';
count:=length(buffer);
_lwrite(MyFile,@Buffer[1],count); //записываем в файл
_lclose(Myfile);
end;
В данном примере использованы следующие функции:
_lwrite (
HFILE hFile, // хэндл файла
LPCSTR lpBuffer, // указатель на буфер, данные из которого записываются в файл
UINT uBytes //число байтов, записываемых в файл
) - запись в файл;
_close (
HFILE hFile // хэндл закрываемого файла
) – закрыть файл;
_lread (
HFILE hFile, // хэндл читаемого файла
LPVOID lpBuffer, // указатель на буфер, в который читать
UINT uBytes // количество байт, которые нужно читать
) – чтение файла;
_llseek(
HFILE hFile, // хэндл файла
LONG lOffset, // количество байт, на которое сдвигается указатель файла
int iOrigin // с какого байта сдвигать
) - позиционирование файла;
Пример:
Myfile:=_lopen('A:\TESTDIR\File1.txt',OF_READ);//открываем файл
count:=8;
_llseek(MyFile,4,FILE_BEGIN); //позиционируем открытый файл на
5-й байт от начала файла
_lread(MyFile,@Buff,count); // читаем 8 байт
ReadFile(
HANDLE hFile, // хэндл читаемого файла
LPVOID lpBuffer, // указатель на буфер, в который читаем
DWORD nNumberOfBytesToRead, // число байт, которые хотим прочесть
LPDWORD lpNumberOfBytesRead,// буфер, в который будет записано
число прочитанных байт
LPOVERLAPPED lpOverlapped // при синхронном вводе значение NULL
) – чтение файла.
SetFilePointer(
HANDLE hFile, // хэндл позиционируемого файла
LONG lDistanceToMove, // число символов, на которое сдвигаем
PLONG lpDistanceToMoveHigh, // старшие 32 разряда числа символов,
на которое сдвигаем
DWORD dwMoveMethod // откуда сдвигать
) - позиционирование файла.
LockFile(
HANDLE hFile, // хэндл блокируемого файла
DWORD dwFileOffsetLow, // младшие 32 разряда
DWORD dwFileOffsetHigh,//старшие 32 смещения блокируемой части файла
DWORD nNumberOfBytesToLockLow,// младшие 32 разряда
DWORD nNumberOfBytesToLockHigh // старшие 32 разряда числа, определяющие
размер блокируемой части файла
) - блокирование файла.
UnlockFile(
HANDLE hFile, // хэндл блокируемого файла
DWORD dwFileOffsetLow, // младшие 32 разряда
DWORD dwFileOffsetHigh,//старшие 32 смещения блокируемой части файла
DWORD nNumberOfBytesToLockLow,// младшие 32 разряда
DWORD nNumberOfBytesToLockHigh // старшие 32 разряда числа,
определяющие размер блокируемой части файла
) - разблокирование файла.
Пример:
begin
//открываем файл
Мyfile:=_lopen('A:\TESTDIR\File1.txt',OF_READWRITE);
// читаем 4096 байт в buff
ReadFile(MyFile, buff, 4096, dwBytesRead, nil);
//позиционируем на конец файла
dwPos := SetFilePointer(MyFile, 0, nil, FILE_END);
//блокирум часть файла
LockFile(MyFile, dwPos, 0, dwPos + dwBytesRead, 0);
buffer:='Дополнительная строка';
count:=length(buffer);
//записываем в конец файла то, что содержит переменная buffer
_lwrite(MyFile,@Buffer[1],count);
//разблокируем часть файла
UnlockFile(MyFile, dwPos, 0, dwPos + dwBytesRead, 0);
End;
SetFileAttributes(
LPCTSTR lpFileName, // имя файла
DWORD dwFileAttributes // устанавливаемые атрибуты
) – установка атрибутов файла.
Пример:
attributes:=FILE_ATTRIBUTE_HIDDEN or FILE_ATTRIBUTE_READONLY;
result:=SetFileAttributes('A:\TESTDIR\File1.txt',attributes);
MoveFile(
LPCTSTR lpExistingFileName,//указатель на буфер с именем файла
LPCTSTR lpNewFileName // указатель на буфер с новым именем файла
) – перемещение файла.
Пример:
result:=MoveFile('A:\TESTDIR\File2.txt','A:\TESTDIR\NEWDIR\File2.txt');
SetVolumeLabel(
LPCTSTR lpRootPathName,//корневой каталог
LPCTSTR lpVolumeName // метка
) - установка метки.
Пример:
result:=SetVolumeLabel('A:\'+#0,'LABEL');//устанавливаем метку дискеты
GetVolumeInformation – получение информации о диске
Пример:
//узнаем метку дискеты
vol:='12345678901';
fsn:='12345678901';
result:= GetVolumeInformation( 'A:\'+#0,@vol[1],$7F,nil,x2, x3,@fsn[1],$7f);
|