注册 登录
编程论坛 C++教室

ReadFile读取成功,但只有前几个字节!求助谢谢~

Escapist 发布于 2020-09-05 16:02, 2056 次点击
只有本站会员才能查看附件,请 登录

图片↑(滑稽.png)
我想实用ReadFile函数读取这个图片的所有内容,代码如下↓
程序代码:
#include<iostream>
#include<Windows.h>
int main()
{
    HANDLE hFile = ::CreateFileA("C:\\Users\\CrezS\\Desktop\\滑稽.png", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
    if (hFile == INVALID_HANDLE_VALUE)
        return 0;
    unsigned long FileSize_Low, FileSize_High;
    FileSize_Low = GetFileSize(hFile, &FileSize_High);
    std::cout << hFile << std::endl;
    std::cout << FileSize_Low << std::endl;
    char* Buffer = new char[FileSize_Low];
    int Read = ReadFile(hFile, Buffer, FileSize_Low, &FileSize_Low, NULL);
    if (Read == 0)
        return 0;
    CloseHandle(hFile);
    std::cout << strlen(Buffer);
}


第一处cout返回的是000000D4,应该是成功的~
第二处返回4911,是文件大小(图片30*30)
但第三处strlen返回的是8,怎么改都解决不了,请问是什么问题,谢谢各位大佬~
(PS:分数有限,谢谢~)
只有本站会员才能查看附件,请 登录

↑输出的内容,转换成整数确实是png的文件头一部分

[此贴子已经被作者于2020-9-5 16:04编辑过]

3 回复
#2
rjsp2020-09-05 22:41
strlen要求参数是“null字节结尾的字符串”,
你应该用 ReadFile 第四个参数带回的值
#3
apull2020-09-06 10:22
楼上正解
char* Buffer里保存的是二进制文件内容,不能作为普通字符串处理。
#4
Escapist2020-09-10 17:35
137
80
78
71
13
10
26
10
0
0
0
13
73
72
68
82
0
0
0
30
0
0
0
30
8
6
0
0
0
59
48
174
162
0
0
0
9
112
72
89
115
以上为部分成功的输出结果,感谢帮助~
1