Windows系统编程OpenFile功能

时间:2013-11-11 20:25:11

标签: c++ windows

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;

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

2 个答案:

答案 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;
}