Статьи по Делфи
Меню сайта


Категории каталога
Мои статьи [2]
Функции и процедуры Win Api [20]
Работа с мышью [10]
Реестр и Делфи [11]
Работа с файлами [38]
Делфи и Хакер [10]
Инсталлятор собственными руками [6]
Хитрости в делфи [3]
Работа с системой [19]


Форма входа


Поиск по каталогу


Друзья сайта


Наш опрос
Понравились ли вам треки
Всего ответов: 156


Приветствую Вас, Гость · RSS 2020-09-19, 10:01 PM
Начало » Статьи » Функции и процедуры Win Api

Функции работы с файлами
Заканчиваем изучать WinAPI работы с фалами и дисками. Это последняя статья, потому что в следующий раз мы перейдём к рассмотрению другой группы WinAPI функций. Я постарался дать тебе максимум инфе о основных API для работы с файлами. Надеюсь, что я работал не зря.

Сегодня ты узнаешь про:

* ReadFile
* RemoveDirectory
* SetCurrentDirectory
* SetEndOfFile
* SetFileAttributes
* SetFilePointer
* SetVolumeLabel
* WriteFile

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.

На этом я заканчиваю рассмотрения функций для работы с файлами.

Категория: Функции и процедуры Win Api | Добавил: Admin (2006-12-16) | Автор: M@ster
Просмотров: 4746 | Комментарии: 2 | Рейтинг: 3.0 |

Всего комментариев: 2
0
2 eclipse   [Материал]
Это точно! А то на словах всё Ничтячок, а на деле? меня интересует именно SetFilePointer как её кушать? Как только уже не крутил а докачивать она всё-таки начинает с перезаписью скачанного!

0
1 Legendary   [Материал]
Было бы не плохо в конце таких подробных описаний хотябы по элементарному РАБОТАЮЩЕМУ подробному примеру =( хотя бы по самому малюсенькому. лично мне статья не помогла, как не знал как ими правильно пользоваться так и не узнал =(

Имя *:
Email *:
Код *: