【发布时间】:2020-03-06 18:13:44
【问题描述】:
void reader(string fileName){
ifstream ifile;
ifile.open(fileName, ios::binary | ios::in);
ifile.seekg (0, ifile.end);
int length = ifile.tellg();
ifile.seekg (0, ifile.beg);
char * buffer = new char [length];
while(ifile.good()){
// read data as a block:
ifile.read (buffer,4);
cout << buffer <<endl;
//ifile.read((char *)&inputName, sizeof(int));
//cout << inputName;
}
ifile.close();
它给出的输出如下所示:
▒d▒▒root.d[$Apd▒▒
endXroot.d
当我希望它看起来更像时
root.d
endXroot.d
数据作为 root.d/0endXroot.d idk 输入到文件中,无论是否有帮助。
【问题讨论】:
-
ifile.read (buffer,4);读取四个字节。请注意,这不一定包括空终止符。cout << buffer <<endl;将buffer的内容打印为空终止字符串,它可能不是。混乱随之而来。会回答,但我不能 100% 解释▒d▒▒。可能byte order mark? -
如果您将
int作为二进制 blob 写入文件,它将以二进制 blob 的形式出现在另一端。奇怪的是▒d▒▒是那个二进制 blob。 -
完全取决于你需要做什么。在这种情况下,您似乎只希望输出为文本。在这种情况下,只有文本进入文件是理所当然的。
-
查看第一条评论并注意关于以空字符结尾的字符串。
-
你把你放进去的东西拿出来。如果你写了一个int,你就不能读一个字符串。在问题中发布写入代码和读取代码。
标签: c++ binaryfiles ifstream