-1

Windows 中 OpenFile 函数的文档位于此处。我正在尝试这样做:

#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;

这给了我一个访问冲突错误。这是为什么?

4

2 回答 2

6

根据文档,第二个论点是......

指向在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);
于 2013-11-11T20:30:16.350 回答
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;
}
于 2013-11-11T20:35:59.807 回答