我尝试使用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)。我得到的是一个.txt文件的内容+一些随机字符(每次运行都不同)。
我试图写缓冲区索引,似乎缓冲区打印超过其大小(?)
我做错了什么?
1条答案
按热度按时间pieyvz9o1#
std::cout << buffer
需要buffer
以空值终止,但实际上不是。您需要为终止符分配空间,例如:或者,您可以改用
cout.write()
,这样就不需要终结符,例如: