簡體   English   中英

ReadFile 緩沖區 output 很奇怪(打印內容 + 一些)

[英]ReadFile buffer output is weird (prints content + some more)

我正在嘗試使用 Win32 API 打開文件並讀取其內容:

HANDLE hFileRead = CreateFileA(FilePath,
                               GENERIC_READ,
                               0,
                               NULL,
                               OPEN_EXISTING,
                               FILE_ATTRIBUTE_NORMAL,
                               NULL);

LARGE_INTEGER fileSize = { 0 };
DWORD cbFileSize = GetFileSizeEx(hFileRead, &fileSize);

PBYTE buffer = (PBYTE)HeapAlloc(GetProcessHeap(), 0, fileSize.QuadPart);
DWORD dwBytesRead = 0;

NTSTATUS s = ReadFile(hFileRead,
                      buffer,
                      fileSize.QuadPart,
                      &dwBytesRead,
                      NULL);

std::cout << buffer << "\n"; // <<< expect to print "asdasd" but prints "asdasd"+random chars (1 or more each run)

我想要獲取的是文件內容(在本例中為 .txt)。 我得到的是 a.txt 文件的內容 + 一些隨機字符(每次運行都不同)。

我試圖編寫索引緩沖區,似乎緩沖區打印的內容超過了它的大小(?)

我究竟做錯了什么?

std::cout << buffer期望buffer以 null 終止,但事實並非如此。 您需要為終結符分配空間,例如:

PBYTE buffer = (PBYTE)HeapAlloc(GetProcessHeap(), 0, fileSize.QuadPart + 1);
...
buffer[dwBytesRead] = 0;

或者,您可以改用cout.write() ,這樣就不需要終止符,例如:

std::cout.write(buffer,dwBytesRead);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM