关于c++中fstream的几个问题
several questions about fstream in c++
首先,我对处理大文件的最佳方式感兴趣,下面的代码是推荐的方式吗?
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main() {
ifstream file("first.exe", ios::binary | ios::app);
file.seekg(0, ios::end);
int size = file.tellg();
file.seekg(0, ios::beg);
char content[size];
file.read(content, size);
ofstream file2("second.exe", ios::binary);
file2.write(content, size);
file2.close();
}
还有,为什么在这种情况下需要使用二进制模式?
这是推荐的方法吗?不是真的。见下文.
二进制模式?
有两种打开文件的方式:文本模式和二进制模式。默认为文本模式,除非您在打开文件时使用std::ios::binary
。
在Linux/Unix上二进制模式和文本模式是相同的。这没什么区别。
在Windows上,当文件以文本模式打开时,o/s会进行一些转换。当你写一个n
(ASCII 10),它被转换成一个rn
对(ASCII 10和13)。当你读取一个rn
对时,它被转换成一个n
。另外,Ctl-Z
(ASCII 26)被视为文件结束,因此读取将终止。
这是历史原因,我现在不会详细说明。如果您读取和写入纯ASCII文本,这不会引起任何问题,甚至可能是可取的。如果您正在处理其他任何文件(例如exe文件),则必须使用二进制模式。
下面的代码演示了一种简单的文件i/o技术,它试图捕捉c++编程的本质。我希望这是不言自明的。查找std::copy(), std::istreambuf_iterator和std::ostreambuf_iterator的引用,并在需要时提出问题。
#include <iostream>
#include <fstream>
#include <algorithm>
int main()
{
std::ifstream fsIn("first.exe", std::ios::binary);
std::ofstream fsOut("second.exe", std::ios::binary|std::ios::trunc);
std::copy(std::istreambuf_iterator<char>(fsIn),
std::istreambuf_iterator<char>(),
std::ostreambuf_iterator<char>(fsOut));
return 0;
}
相关文章:
- 为我的 c++ 类介绍制作一个三角形分类器.我有几个问题
- 关于 std::bitset 构造函数的几个问题?
- 分发我自己的程序的几个问题
- 关于Qt的几个问题
- 关于SDL_Window和unique_ptr的几个问题
- 关于C++内联函数的几个问题
- 我正在尝试[C++]练习多态性和OOD原则。需要指导和几个问题的答案
- 关于C++中数组的几个问题
- 我是C++新手,我有几个问题想问
- C++ - 关于引发异常的几个问题
- 选择-几个问题
- 在Windows上编译和运行示例c++程序的几个问题
- ReadFileEx,可变长度-几个问题
- c++中虚方法表的几个问题
- 关于评价顺序和比较的几个问题
- 关于类成员指针的几个问题
- 模板类——几个问题
- Qt(C++)的几个问题
- QtCreator的几个问题
- 关于c++中fstream的几个问题