Заканчиваем изучать WinAPI работы с фалами и дисками.
Это последняя статья, потому что в следующий раз мы перейдём к рассмотрению
другой группы WinAPI функций. Я постарался дать тебе максимум инфе о основных
API для работы с файлами. Надеюсь, что я работал не зря.
Сегодня ты узнаешь про:
ReadFile
Функция читает из файла блок данных начиная с текущей
позиции. После прочтения блока, позиция переносится в конец прочитанного блока.
Существует в: Win NT, Win9x, Win32s.
Для С/С++ объявлена в winbase.h. Для Delphi в модуле
windows.
Объявление:
Для С/С++
BOOL ReadFile(
HANDLE hFile, // Указатель на открытый файл
LPVOID lpBuffer, // Указатель на буфер, куда поместится прочитанный блок
DWORD nNumberOfBytesToRead, // количество прочитанных байтов
LPDWORD lpNumberOfBytesRead,// указатель на число прочитанных данных
LPOVERLAPPED lpOverlapped // указатель на структуру OVERLAPPED
);
Для Delphi
function ReadFile(
hFile: THandle; // Указатель на открытый файл
var Buffer; // Указатель на буфер, куда поместится прочитанный блок
nNumberOfBytesToRead: DWORD; // количество прочитанных байтов
var lpNumberOfBytesRead: DWORD; // указатель на число прочитанных данных
lpOverlapped: POverlapped // указатель на структуру OVERLAPPED
): BOOL; stdcall;
Если всё ничтяк, то функция вернёт TRUE.
RemoveDirectory
Функция удаляет директорию. Если внутри есть хотя бы
один файл или другая директория, то произойдёт ошибка. Удаление возможно только
пустой директории.
Существует в: Win NT, Win9x, Win32s.
Для С/С++ объявлена в winbase.h. Для Delphi в модуле
windows.
Объявление:
Для С/С++
BOOL RemoveDirectory(
LPCTSTR lpPathName // Указатель на путь директории
);
Для Delphi
function RemoveDirectory(
lpPathName: PChar// Указатель на путь директории
): BOOL; stdcall;
Если всё ничтяк, то функция вернёт TRUE.
Пример использования: RemoveDirectory("с:\Windows");
SetCurrentDirectory
Функция изменяет текущую директорию на указанную. Это
значит, что когда ты будешь использовать другие функции работы с файлами, и не
указывать путь, то ОС будет искать файл в этой директории.
Существует в: Win NT, Win9x, Win32s.
Для С/С++ объявлена в winbase.h. Для Delphi в модуле
windows.
Объявление:
Для С/С++
BOOL SetCurrentDirectory(
LPCTSTR lpPathName // Указатель на строку, содержащую путь
);
Для Delphi
function SetCurrentDirectory(
lpPathName: PChar // Указатель на строку, содержащую путь
): BOOL; stdcall;
Если всё ничтяк, то функция вернёт TRUE.
SetEndOfFile
Функция делает текущую позицию файла концом файла. Если
тебе нужно сократить размер файла, то вызови эту функцию, установи курсор в
необходимую позицию и вызови эту функцию.
Существует в: Win NT, Win9x, Win32s.
Для С/С++ объявлена в winbase.h. Для Delphi в модуле
windows.
Объявление:
Для С/С++
BOOL SetEndOfFile(
HANDLE hFile // Указатель на открытый файл
);
Для Delphi
function SetEndOfFile(
hFile: THandle // Указатель на открытый файл
): BOOL; stdcall;
Если всё ничтяк, то функция вернёт TRUE.
SetFileAttributes
Функция позволяет устанавливать на файл атрибуты.
Существует в: Win NT, Win9x, Win32s.
Для С/С++ объявлена в winbase.h. Для Delphi в модуле
windows.
Объявление:
Для С/С++
BOOL SetFileAttributes(
LPCTSTR lpFileName, // Путь к файлу
DWORD dwFileAttributes // Будущие атрибуты файла
);
Для Delphi
function SetFileAttributes(
lpFileName: PChar; // Путь к файлу
dwFileAttributes: DWORD // Будущие атрибуты файла
): BOOL; stdcall;
С первым параметром всё ясно. Это просто путь к файлу. А
вот второй параметр это атрибуты. Они могут быть в виде сочетания следующих
флагов:
- FILE_ATTRIBUTE_ARCHIVE - атрибут
архивного файла.
- FILE_ATTRIBUTE_HIDDEN - атрибут
спрятанного файла.
- FILE_ATTRIBUTE_NORMAL - атрибут
нормального файла.
- FILE_ATTRIBUTE_OFFLINE - указывает на
то, что данные файла не доступны и находятся на отключённом
устройстве
- FILE_ATTRIBUTE_READONLY - атрибут файла
только для чтения.
- FILE_ATTRIBUTE_SYSTEM - атрибут
системного файла.
- FILE_ATTRIBUTE_TEMPORARY - атрибут
временного файла.
Если всё ничтяк, то функция вернёт TRUE.
SetFilePointer
Функция устанавливает позицию в файле. Например, если ты
хочешь прочитать данные из файла начиная с какой-то позиции, то ты должен
воспользоваться этой функцией, чтобы выставить позицию, а потом прочитать данные
начиная с этой позиции.
Существует в: Win NT, Win9x, Win32s.
Для С/С++ объявлена в winbase.h. Для Delphi в модуле
windows.
Объявление:
Для С/С++
DWORD SetFilePointer(
HANDLE hFile, // Указатель на открытый файл
LONG lDistanceToMove, // количество байт, на которые надо передвинуться
PLONG lpDistanceToMoveHigh, // Второй байт, указывающий количество байт
DWORD dwMoveMethod //Откуда нужно начинать двигаться
);
Для Delphi
function SetFilePointer(
hFile: THandle; // Указатель на открытый файл
lDistanceToMove: Longint; // количество байт, на которые надо передвинуться
lpDistanceToMoveHigh: Pointer; // Второй байт, указывающий количество байт
dwMoveMethod: DWORD //Откуда нужно начинать двигаться
): DWORD; stdcall;
Первый параметр - указатель на открытый файл. Второй и
третий параметры определяют количество байт, на которые надо передвинуться.
Последний параметр - это флаг определяющий откуда надо начинать двигаться:
- FILE_BEGIN - Передвинуться от начала
файла вперёд.
- FILE_CURRENT - Передвинуться начиная от
текущей позиции вперёд.
- FILE_END - Передвинуться от конца файла
к началу.
Если всё ничтяк, то функция вернёт младший байт
установленной позиции.
Если ты хочешь узнать текущую позицию файла, то можешь
смухлевать, вызвав функцию с такими параметрами: SetFilePointer(h,0,0,
FILE_CURRENT). Этим ты заставляешь передвинутся на 0 байтов от текущей позиции.
Передвижения не произойдёт, но функция вернёт новую позицию файла, то есть
текущую.
SetVolumeLabel
Функция устанавливает метку тома
Существует в: Win NT, Win9x.
Для С/С++ объявлена в winbase.h. Для Delphi в модуле
windows.
Объявление:
Для С/С++
BOOL SetVolumeLabel(
LPCTSTR lpRootPathName, // Указатель на имя тома
LPCTSTR lpVolumeName // Метка тома
);
Для Delphi
function SetVolumeLabel(
lpRootPathName: PChar; // Указатель на имя тома
lpVolumeName: PAnsiChar// Метка тома
): BOOL; stdcall;
Если всё ничтяк, то функция вернёт TRUE.
WriteFile
Функция производит запись блока данных начиная с текущей
позиции в файле.
Существует в: Win NT, Win9x, Win32s.
Для С/С++ объявлена в winbase.h. Для Delphi в модуле
windows.
Объявление:
Для С/С++
BOOL WriteFile(
HANDLE hFile, // Указатель на открытый файл
LPCVOID lpBuffer, // Указатель на данные для записи
DWORD nNumberOfBytesToWrite, // Количество записанных байт
LPDWORD lpNumberOfBytesWritten,// Указатель на количество записанных байт
LPOVERLAPPED lpOverlapped // Указатель на структуру OVERLAPPED
);
Для Delphi
function WriteFile(
hFile: THandle; // Указатель на открытый файл
const Buffer; // Указатель на данные для записи
nNumberOfBytesToWrite: DWORD; // Количество записанных байт
var lpNumberOfBytesWritten: DWORD; // Указатель на количество записанных байт
lpOverlapped: POverlapped // Указатель на структуру OVERLAPPED
): BOOL; stdcall;
Если всё ничтяк, то функция вернёт TRUE.
На этом я заканчиваю рассмотрения функций для работы с
файлами.
|