【发布时间】:2017-10-08 18:34:24
【问题描述】:
我刚开始在 C++ 中处理二进制文件,并且我已经成功地编写和读取了一个 (.bin) 文件。代码如下:
#include <iostream>
#include <cstring>
#include <fstream>
using namespace std;
int main()
{
char input[100];
strcpy(input, "This is a string");
fstream file("example.bin", ios::binary | ios::in | ios::out |
ios::trunc);
if(!file.is_open())
{
cerr << "Error opening file.\n";
} else {
for(int i = 0; i<= strlen(input); i++)
{
file.put(input[i]);
}
}
file.seekg(0);
char ch;
while(file.good())
{
file.get(ch);
cout<<ch;
}
}
这奏效了。之后,我尝试重新设计代码以读取二进制文件。主要更改是:将 fstream 更改为 ifstream(读取),删除了写入文件的部分。代码准备好后,我找到了一个我想读取的文件 (eof0.bin)。当我使用代码时,我唯一得到的是一个空字符串。我注意到文件的初始大小是 37 KB,而使用我的程序后它变成了 0。我想知道,我的程序是如何清除二进制文件中的数据的?
这是我用来读取文件的代码。
#include <iostream>
#include <cstring>
#include <fstream>
using namespace std;
int main()
{
ifstream file("eof0.bin", ios::binary | ios::in | ios::out | ios::trunc);
if(!file.is_open())
{
cerr << "Error opening file.\n";
} else {
// Nothing.
}
file.seekg(0);
char ch;
while(file.good())
{
file.get(ch);
cout<<ch;
}
}
一切都可以编译,但在 37 KB 大小的文件上使用它会给我一个 0 KB 的文件。
【问题讨论】:
-
为什么不显示有效的代码,而不显示无效的代码?
-
在问题中提供导致意外行为的代码以及一个小的示例输入文件(其内容为文本形式)会更好......
-
代码实际编译,所以成功了。
-
只需要阅读为什么要打开输出?
-
另外,
ios::trunc表示它将截断(清空)文件
标签: c++ file binary fstream ifstream