WinAPI. Функции работы с файлами. Часть 4

WinAPI
WinAPI. Функции работы с файлами. Часть 4:

Заканчиваем изучать 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.

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



Опубликовал admin
29 Май, Четверг 2003г.



Программирование для чайников.