Заканчиваем изучать 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. На этом я заканчиваю рассмотрения функций для работы с файлами.
|