Составители:
SEM_FAILCRITICALERRORS. В этом случае при отсутствии гибкого диска в дисководе
система не будет отображать на экране каких-либо сообщений об ошибках.
Обладая дескриптором файла, можно выполнить чтение или запись данных при
помощи функций ReadFile() и WriteFile() соответственно. Эти функции работают стан-
дартным образом: в качестве параметров они принимают дескриптор файла, указатель
на буфер, длину буфера и указатель на переменную, в которой будет сохранено количе-
ство прочитанных или записанных байт. Если используется перекрывающийся
ввод/вывод, в качестве одного из аргументов необходимо передать указатель на струк-
туру OVERLAPPED. Для обычных файлов указатель на эту структуру всегда равен
NULL.
BOOL ReadFile( HANDLE hFile; // дескриптор файла
LPVOID lpBuffer; // буфер для временного хранения
// прочитанных данных
DWORD dwBytesToRead; // количество байтов, которые должны
// быть прочитаны
LPDWORD lpdwBytesRead; // возвращает количество прочитанных байтов
LPOVERLAPPED lpOverlapped ); // поддержка асинхронного ввода/вывода
BOOL WriteFile( HANDLE hFile, // дескриптор файла
CONST VOID *lpBuffer, //указывает данные, которые должны быть
// записаны в файл
DWORD dwBytesToWrite, // количество записываемых байтов
LPDWORD lpdwBytesWritten, // возвращает количество записанных байтов
LPOVERLAPPED lpOverlapped ); // задает поддержку асинхронного
// ввода/вывода
Чтобы закрыть файл, используется функция CloseHandle(). Эту функцию можно
использовать не только для закрытия дескрипторов файлов. С ее помощью можно за-
крыть любой другой дескриптор.
BOOL CloseHandle( HANDLE hObject);
Для примера приведен исходный код простой программы, использующей файло-
вые операции для отображения на экране содержимого одного или нескольких файлов.
Вызов CreateFile() открывает файл для чтения. После этого вызов GetStdHandle() воз-
вращает дескриптор стандартного вывода. Затем при помощи функций ReadFile() и Wri-
teFile() блоками по 4 Кбайт происходит передача содержимого файла с жесткого диска в
стандартный поток вывода. Передача продолжается до тех пор, пока программа не обна-
ружит конец файла.
#include <windows.h>
void MB(char *s) // Для удобства использования MessageBox
{
MessageBox(NULL, s, NULL, MB_OK | MB_ICONSTOP);
}
void docat(char *fname) // основная подпрограмма
{
HANDLE f=CreateFile ( fname, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0,
NULL);
HANDLE out=GetStdHandle(STD_OUTPUT_HANDLE);
if (f==INVALID_HANDLE_VALUE)
135
SEM_FAILCRITICALERRORS. В этом случае при отсутствии гибкого диска в дисководе
система не будет отображать на экране каких-либо сообщений об ошибках.
Обладая дескриптором файла, можно выполнить чтение или запись данных при
помощи функций ReadFile() и WriteFile() соответственно. Эти функции работают стан-
дартным образом: в качестве параметров они принимают дескриптор файла, указатель
на буфер, длину буфера и указатель на переменную, в которой будет сохранено количе-
ство прочитанных или записанных байт. Если используется перекрывающийся
ввод/вывод, в качестве одного из аргументов необходимо передать указатель на струк-
туру OVERLAPPED. Для обычных файлов указатель на эту структуру всегда равен
NULL.
BOOL ReadFile( HANDLE hFile; // дескриптор файла
LPVOID lpBuffer; // буфер для временного хранения
// прочитанных данных
DWORD dwBytesToRead; // количество байтов, которые должны
// быть прочитаны
LPDWORD lpdwBytesRead;// возвращает количество прочитанных байтов
LPOVERLAPPED lpOverlapped ); // поддержка асинхронного ввода/вывода
BOOL WriteFile( HANDLE hFile, // дескриптор файла
CONST VOID *lpBuffer, //указывает данные, которые должны быть
// записаны в файл
DWORD dwBytesToWrite, // количество записываемых байтов
LPDWORD lpdwBytesWritten, // возвращает количество записанных байтов
LPOVERLAPPED lpOverlapped ); // задает поддержку асинхронного
// ввода/вывода
Чтобы закрыть файл, используется функция CloseHandle(). Эту функцию можно
использовать не только для закрытия дескрипторов файлов. С ее помощью можно за-
крыть любой другой дескриптор.
BOOL CloseHandle( HANDLE hObject);
Для примера приведен исходный код простой программы, использующей файло-
вые операции для отображения на экране содержимого одного или нескольких файлов.
Вызов CreateFile() открывает файл для чтения. После этого вызов GetStdHandle() воз-
вращает дескриптор стандартного вывода. Затем при помощи функций ReadFile() и Wri-
teFile() блоками по 4 Кбайт происходит передача содержимого файла с жесткого диска в
стандартный поток вывода. Передача продолжается до тех пор, пока программа не обна-
ружит конец файла.
#include
void MB(char *s) // Для удобства использования MessageBox
{
MessageBox(NULL, s, NULL, MB_OK | MB_ICONSTOP);
}
void docat(char *fname) // основная подпрограмма
{
HANDLE f=CreateFile ( fname, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0,
NULL);
HANDLE out=GetStdHandle(STD_OUTPUT_HANDLE);
if (f==INVALID_HANDLE_VALUE)
135
Страницы
- « первая
- ‹ предыдущая
- …
- 131
- 132
- 133
- 134
- 135
- …
- следующая ›
- последняя »
