Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
7 - 8 лаба по оссп в исходнике отавлены нужные...doc
Скачиваний:
4
Добавлен:
01.03.2025
Размер:
1.17 Mб
Скачать

Правила именования файлов в Win32

Поскольку Win32 поддерживает несколько файловых систем, все они должны подчиняться неким общим правилам. Имена каталогов и файлов в полном имени файла (pathname) отделяются обратной косой чертой (\). Кроме правил формирования полного имени действуют и правила именования каталогов и файлов:

– полное имя файла завершается нулевым символом;

– имена файлов и каталогов не должны содержать разделительного символа (\), символов с ANSI-кодами от 0 до 31, а также символов, явно запрещенных в какой-либо файловой системе;

– имена файлов и каталогов могут включать буквы разного регистра, но при поиске файлов и каталогов регистр букв не учитывается. Если файл с именем ReadMe.Txt существует, создание нового файла с именем README.TXT уже не допускается;

– точка (.) идентифицирует текущий каталог. Например, .\README.TXT означает, что файл README.TXT находится в текущем каталоге;

– две точки (..) идентифицируют родительский каталог. Например, ..\README.TXT означает, что файл README.TXT находится в родительском каталоге текущего каталога;

– точка (.), используемая как часть имени файла или каталога, считается разделителем компонентов имени. Например, в файле README.TXT точка отделяет имя файла от его расширения;

– имена файлов и каталогов не должны содержать некоторых специальных символов вроде <, >, : , " или ].

Запись информации в файл и чтение информации из файла

Существуют два режима чтения и записи файлов: синхронный и асинхронный. При синхронном вводе/выводе процесс выборки данных выглядит следующим образом:

  1. Программист выделяет в памяти буфер определенного размера.

  2. Программист открывает файл, к которому он намерен обращаться.

  3. Программист устанавливает указатель файла на то место в файле, где находятся интересующие его данные.

  4. Данные из файла считываются в буфер.

  5. В буфере производятся определенные действия.

  6. Буфер записывается на то же место в файле или добавляется в конец файла.

Естественно, что в реальной ситуации те или иные шаги могут быть опущены.

Прежде чем считывать информацию из файла или записывать информацию в файл, необходимо сначала его открыть. Для этого надо воспользоваться функцией CreateFile:

HANDLE CreateFile( LPCTSTR lpFileName, // file name

DWORD dwDesiredAccess, // access mode

DWORD dwShareMode, // share mode

LPSECURITY_ATTRIBUTES lpSecurtityAttributes, // SD

DWORD dwCreationDisposition, // how to create

DWORD dwFlagsAttributes, // file attributes

HANDLE hTemplateFile // handle to template file

);

Четвертый параметр lpSecurityAttributes заслуживает особого разговора. Он представляет собой указатель на структуру SECURITY_ATTRIBUTES, которая в файле winbase.h описана так:

typedef struct_SECURITY_ATTRIBUTES{

DWORD nLendgth;

LPVOID lpSecurityDescriptor;

BOOL bInheritHandle;

}SECURITY_ATTRIBUTES,*PSECURITY_ATTRIBUTES,

*LPSECURITY_ATTRIBUTES;

Если никакой особой защиты файлу не требуется, то в это поле можно занести NULL.

Открыв файл, в конце программы нужно обязательно закрыть его. Для того чтобы закрыть файл, необходимо вызвать функцию CloseHandle:

BOOL CloseHandle( HANDLE hObject}; // handle to object

Чтение данных из файла в синхронном режиме осуществляется функцией ReadFile:

BOOL ReadFile(

HANDLE hFile, // handle to file

LPVOID lpBuffer, // data buffer

DWORD nNumberOfBytesToRead, // number of bytes to read

LPDWORD lpNumberOfBytesRead, // number of bytes read

LPOVERLAPPED lpOverlapped // overlapped buffer

);

Запись данных в файл в синхронном режиме осуществляется функцией WriteFile:

BOOL WriteFile( HANDLE hFile, LPCVOID lpBuffer,

DWORD nNumberOfBytesToWrite,

LPDWORD lpNumberOfBytesWritten,

LPOVERLAPPED lpOverlapped );

Для того чтобы осуществить асинхронный доступ к файлу, необходимо открыть файл при помощи функции CreateFile и указать в аргументе dwflagsattributes флаг FILE_FLAG_OVERLAPPED, который укажет, что файл будет открыт именно для асинхронного доступа к данным. Кроме этого, в данном случае в отличие от операций, производимых в синхронном режиме, надо использовать структуру типа OVERLAPPED. В файле winbase.h эта структура описана следующим образом:

typedef struct_OVERLAPPED{

DWORD Internal;

DWORD InternalHigh;

DWORD Offset;

DWORD OffsetHigh;

HANDLE hEvent;

}OVERLAPPED,*LPOVERLAPPED;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]