无法让 ReadFile 从我刚刚写入的文件中读取

Posted

技术标签:

【中文标题】无法让 ReadFile 从我刚刚写入的文件中读取【英文标题】:Can't get ReadFile to read from the file i just wrote to 【发布时间】:2012-02-07 16:26:45 【问题描述】:

我正在使用WriteFile 写入文件。这很好用。它只是一个简单的字符串:

“测试字符串,测试windows函数”。

我现在尝试从文件中读取并与我写的字符串进行比较,以确保其正常工作。我有:

DWORD dwBytesRead;
char buff[128];
ReadFile(hFile, buff, 128, &dwBytesRead, NULL)

但它对我来说返回错误。 hFile 是我在写入文件时使用的句柄。可以对可能发生的事情有任何想法吗?

编辑(根据评论更新):

我从GetLastError() 收到E_ACCESSDENIED。这是我得到hFile的方法:

hFile = CreateFile (TEXT(movedFileName.c_str()),
                    GENERIC_WRITE,
                    0,
                    NULL,
                    OPEN_EXISTING,
                    FILE_ATTRIBUTE_NORMAL,
                    NULL);

【问题讨论】:

你能贴出初始化hFile的代码吗? ReadFile() 失败后GetLastError() 返回什么? 检查GetLastError(),请说明你是如何获得hFile的。 您是否回到了文件的开头? 我从 GetLastError 得到 E_ACCESSDENIED。 (以下道歉,我不知道如何格式化这些帖子)这是我获得 hFile 的方式:hFile = CreateFile (TEXT(movedFileName.c_str()), GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);跨度> 编辑——是的,找到了。为这样发布我的回复而欢呼。 GENERIC_WRITE 应该是 GENERIC_WRITE | GENERIC_READ。 【参考方案1】:

hFile 仅对GENERIC_WRITE 开放。如果您想读取它并写入它,则需要使用GENERIC_READ 打开它:

hFile = CreateFile (TEXT(movedFileName.c_str()),
                    GENERIC_WRITE | GENERIC_READ,
                    0,
                    NULL,
                    OPEN_EXISTING,
                    FILE_ATTRIBUTE_NORMAL,
                    NULL);

【讨论】:

干杯。不过,我遇到了另一个问题。 buff充满了只是ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ。我以前从未遇到过 LPVOID,所以我不知道它是否在那里或什么。基本上我上面有那个字符串,我想通过一个buff来测试字符串和我从文件中读取的内容是否相同。有没有办法做到这一点? 你在你的例子中分配给 buff[] 没有初始化,看看@msdn.microsoft.com/en-us/library/windows/desktop/… @user1100102,我会问另一个问题。尝试在 cmets 中解决它会得到更多关注和更容易响应。

以上是关于无法让 ReadFile 从我刚刚写入的文件中读取的主要内容,如果未能解决你的问题,请参考以下文章

匿名管道的 ReadFile 函数

ReadFile 未正确读取字节

fs.readFile 无法在 nodejs 中使用 ffmpeg 读取缩略图生成的文件

从 Javascript 页面保存 JSON 数据

nodeJS文件流和事件

我想在写入过程完成后从我的二进制文件中读取数据,并且在没有写入过程的情况下读取数据