Windows中OpenFile功能的文档位于here。我正在尝试这样做:
#include "Tchar.h"
#include <windows.h>
int main(int argc, TCHAR *argv[]){
LPOFSTRUCT _buffer;
HFILE _hfile_ = OpenFile("E:\\mozunit.txt", _buffer, OF_READ);
LPVOID _buffer_read;
LPDWORD _bytes_read;
bool flag = ReadFile(_buffer, _buffer_read, 5, _bytes_read, NULL);
CloseHandle(_buffer);
return 0;
}
现在,当我运行这个时,我收到一个错误,我没有初始化_buffer
。因此,为了反驳我初始化_buffer
,请执行以下操作:
LPOFSTRUCT _buffer = NULL;
这给了我一个访问冲突错误。那是为什么?
答案 0 :(得分:6)
根据the documentation,第二个论点是......
指向
OFSTRUCT
结构的指针,该结构在首次打开文件时接收有关文件的信息。
通过将其设置为NULL
,您尝试写入地址为零的内存。
请改为尝试:
OFSTRUCT buffer;
HFILE hfile = OpenFile("E:\\mozunit.txt", &buffer, OF_READ);
char buffer_read[6];
DWORD bytes_read = 0;
bool flag = ReadFile(hfile, &buffer_read, 5, &bytes_read, NULL);
CloseHandle(hfile);
答案 1 :(得分:3)
您需要将指向已分配的LPOFSTRUCT
对象的指针传递给OpenFile
。您正在将NULL
传递给期望有效内存的函数,而不是NULL。您声明一个OFSTRUCT
对象并将指针传递给OpenFile
您在ReadFile
中传递的参数存在同样的问题。您需要在CloseFile
文件句柄上调用_hFile_
,而不是_buffer
。同样适用于ReadFile
最后您不应该使用OpenFile
- 您应该使用CreateFile
作为文档说明。
您的代码应该更像是:
#include "Tchar.h"
#include <windows.h>
int main(int argc, TCHAR *argv[]){
OFSTRUCT _buffer = {0}; // Create an OFSTRUCT structure local variable and initialize it to zero.
HFILE _hfile_ = OpenFile("E:\\mozunit.txt", &_buffer, OF_READ);
char _buffer_read[5];
DWORD _bytes_read;
bool flag = ReadFile(_hfile_ , _buffer_read, 5, &_bytes_read, NULL);
CloseHandle(_hfile_ );
return 0;
}