标题:ReadFile读取成功,但只有前几个字节!求助谢谢~
只看楼主
Escapist
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2020-4-27
结帖率:75%
已结贴  问题点数:25 回复次数:3 
ReadFile读取成功,但只有前几个字节!求助谢谢~

图片↑(滑稽.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编辑过]

搜索更多相关主题的帖子: 读取 返回 std cout 成功 
2020-09-05 16:02
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:25 
strlen要求参数是“null字节结尾的字符串”,
你应该用 ReadFile 第四个参数带回的值
收到的鲜花
  • Escapist2020-09-10 17:34 送鲜花  1朵  
2020-09-05 22:41
apull
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:三体星系
等 级:版主
威 望:185
帖 子:1404
专家分:8479
注 册:2010-3-16
得分:0 
楼上正解
char* Buffer里保存的是二进制文件内容,不能作为普通字符串处理。
收到的鲜花
  • Escapist2020-09-10 17:34 送鲜花  2朵   附言:忘记分给你分了
2020-09-06 10:22
Escapist
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2020-4-27
得分:0 
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
以上为部分成功的输出结果,感谢帮助~
2020-09-10 17:35



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-503075-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.571202 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved