C++ ReadFile lpBuffer参数

C++ ReadFile lpBuffer参数,c++,windows,C++,Windows,我使用ReadFile读取一个简单字符串,该字符串是我使用WriteFile写入文件的 有一个简单的字符串:“测试字符串,测试windows函数” 使用WriteFile将其写入文件 现在我想使用ReadFile来确认它是否已写入该文件。我需要将我读到的内容与上面的原始字符串进行比较。从我的文件中读取 DWORD dwBytesRead; char buff[128]; if(!ReadFile(hFile, buff, 128, &dwBytesRead, NULL)) //F

我使用ReadFile读取一个简单字符串,该字符串是我使用WriteFile写入文件的

有一个简单的字符串:“测试字符串,测试windows函数”

使用WriteFile将其写入文件

现在我想使用ReadFile来确认它是否已写入该文件。我需要将我读到的内容与上面的原始字符串进行比较。从我的文件中读取

DWORD dwBytesRead;
char buff[128];
if(!ReadFile(hFile, buff, 128, &dwBytesRead, NULL))
    //Fail
函数返回true,因此它正在从文件中读取。问题是buff充满了正义。我以前从未遇到过LPVOID,所以我不知道它是不是有什么东西。有没有办法进行字符串比较

编辑:我用来写入文件的代码非常简单:

if(!WriteFile(hFile, sentence.c_str(), sentence.length(), &bytesWritten, NULL))
{
    //FAIL
}
函数返回true,因此它正在从文件中读取。问题是buff充满了正义

ReadFile
仅将缓冲区填充到
dwBytesRead
的值。如果您试图使用字符串,则必须在
ReadFile
返回以下值后自行终止该字符串:

buff [dwBytesRead] = 0;

您不应该使用128作为
nNumberOfBytesToRead
,因为打印字符串时可能会越界(或者将
buff
视为以0结尾的字符串)。同时检查
dwBytesRead
是否真的读取了那么多字节,并按照@James McLaughlin的建议0-终止字符串。

文件指针需要在
WriteFile()
之后和
ReadFile()
之前重新缠绕。目前,
ReadFile()
不会失败,但读取的字节数为零,因此
buff
保持不变。由于
buff
未初始化,因此它包含垃圾。要将文件指针倒回文件开头,请使用:

#包括
#包括
#包括
int main()
{
HANDLE hFile=CreateFile(“myfile.txt”,
一般写,一般读,
0,
无效的
开放式,
文件\u属性\u正常,
无效);
if(hFile)
{
字符串句子(“测试”);
德沃德·拜特斯莱特;
如果(写文件)(hFile,
句子c_str(),
句子长度(),
&BytesWrited,
空)
{
如果(无效的\u集\u文件\u指针!=SetFilePointer(hFile,
0,
0,
文件(开始)
{
char buf[128]={0};/*初始化“buf”*/
德沃德·拜特斯雷德;
/*将少一个字符读入“buf”以确保空终止*/
if(ReadFile(hFile、buf、127和bytesRead,NULL))
{

std::您是否将文件指针移到了文件的开头或重新打开了它?您在此处提供的代码很好。问题出在其他地方。您可以显示用于写入文件的代码吗?可能是Abyx的副本-我没有移动任何指针。我只是写入文件,然后尝试从文件读取。我假设ReadFile将从文件的开头开始文件。不是这样吗?如果是128,它只能读取128个字符。我的字符串只有30个字符长。我知道我可能会有越界问题,但是如果我使用字符串的长度进行循环,那么我不会遇到这个问题,那么我只需要检查从文件读取的下一个字符是否为空(如果这就是它的工作原理,第一次做这种事情,所以不确定)是的,这就是问题所在。谢谢,那让我的头很难受
#include <windows.h>
#include <iostream>
#include <string>

int main()
{
    HANDLE hFile = CreateFile ("myfile.txt",
                               GENERIC_WRITE | GENERIC_READ,
                               0,
                               NULL,
                               OPEN_EXISTING,
                               FILE_ATTRIBUTE_NORMAL,
                               NULL);
    if (hFile)
    {
        std::string sentence("a test");
        DWORD bytesWritten;
        if (WriteFile(hFile,
                      sentence.c_str(),
                      sentence.length(),
                      &bytesWritten,
                      NULL))
        {
            if (INVALID_SET_FILE_POINTER != SetFilePointer(hFile,
                                                           0,
                                                           0,
                                                           FILE_BEGIN))
            {
                char buf[128] = { 0 }; /* Initialise 'buf'. */
                DWORD bytesRead;

                /* Read one less char into 'buf' to ensure null termination. */
                if (ReadFile(hFile, buf, 127, &bytesRead, NULL))
                {
                    std::cout << "[" << buf << "]\n";
                }
                else
                {
                    std::cerr << "Failed to ReadFile: " <<
                        GetLastError() << "\n";
                }
            }
            else
            {
                std::cerr << "Failed to SetFilePointer: " <<
                    GetLastError() << "\n";
            }

        }
        else
        {
            std::cerr << "Failed to WriteFile: " << GetLastError() << "\n";
        }

        CloseHandle(hFile);
    }
    else
    {
        std::cerr << "Failed to open file: " << GetLastError() << "\n";
    }

    return 0;
}