Windows磁盘API实践
在Windows系统上,文件/目录的操作离不开磁盘的读写操作。而在程序中进行磁盘读写操作的API有很多,各自有自己的特点和适用场景。这篇文章将介绍几种Windows磁盘API的使用方法,包括CreateFile、ReadFile、WriteFile等。
CreateFile
CreateFile是用于创建或打开文件、目录、磁盘等对象的API函数。通过这个函数可以打开一个文件或设备,并返回一个文件句柄,我们可以通过这个句柄对其进行后续的操作。
下面是CreateFile的函数定义:
HANDLE CreateFile(
LPCWSTR lpFileName,
DWORD dwDesiredAccess,
DWORD dwShareMode,
LPSECURITY_ATTRIBUTES lpSecurityAttributes,
DWORD dwCreationDisposition,
DWORD dwFlagsAndAttributes,
HANDLE hTemplateFile
);
其中,参数说明如下:
- lpFileName:文件名(包括路径)
- dwDesiredAccess:访问权限
- dwShareMode:共享模式
- lpSecurityAttributes:安全描述符
- dwCreationDisposition:文件创建方式
- dwFlagsAndAttributes:打开文件的特殊标志和属性
- hTemplateFile:模板文件句柄
例如,要打开一个名为data.txt的文件,并以读写方式打开,可以使用如下的代码:
HANDLE hFile = CreateFile(L"data.txt",
GENERIC_READ|GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
ReadFile
ReadFile是用于从文件或设备读取数据的API函数。该函数的函数定义如下:
BOOL ReadFile(
HANDLE hFile,
LPVOID lpBuffer,
DWORD nNumberOfBytesToRead,
LPDWORD lpNumberOfBytesRead,
LPOVERLAPPED lpOverlapped
);
其中,参数说明如下:
- hFile:文件句柄
- lpBuffer:缓冲区
- nNumberOfBytesToRead:要读取的字节数
- lpNumberOfBytesRead:实际读取的字节数
- lpOverlapped:用于异步读取的overlapped结构体
例如,要从数据文件中读取前100个字节,可以使用如下的代码:
char buffer[100] = {0};
DWORD dwRead;
BOOL bRet = ReadFile(hFile, buffer, 100, &dwRead, NULL);
WriteFile
WriteFile是用于向文件或设备写入数据的API函数。该函数的函数定义如下:
BOOL WriteFile(
HANDLE hFile,
LPCVOID lpBuffer,
DWORD nNumberOfBytesToWrite,
LPDWORD lpNumberOfBytesWritten,
LPOVERLAPPED lpOverlapped
);
其中,参数说明如下:
- hFile:文件句柄
- lpBuffer:缓冲区
- nNumberOfBytesToWrite:要写入的字节数
- lpNumberOfBytesWritten:实际写入的字节数
- lpOverlapped:用于异步写入的overlapped结构体
例如,要向数据文件中写入一段数据,可以使用如下的代码:
char buffer[100] = "hello world";
DWORD dwWritten;
BOOL bRet = WriteFile(hFile, buffer, strlen(buffer), &dwWritten, NULL);
CloseHandle
CloseHandle是用于关闭文件/设备句柄的API函数。使用完文件句柄后,必须调用CloseHandle函数来释放资源。
CloseHandle的函数定义如下:
BOOL CloseHandle(
HANDLE hObject
);
其中,参数hObject为需要关闭的句柄。
例如,要关闭之前打开的文件句柄,可以使用如下代码:
CloseHandle(hFile);
以上就是Windows磁盘API的使用方法,通过CreateFile、ReadFile、WriteFile等几个API函数,可以完成对文件及设备的读写操作。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:windows磁盘API实践 - Python技术站