无法让 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 从我刚刚写入的文件中读取的主要内容,如果未能解决你的问题,请参考以下文章