【发布时间】:2016-02-02 01:40:38
【问题描述】:
我正在使用 C++ 流读取目录中的一堆文件,然后将它们写入另一个目录。由于这些文件可能属于不同类型,因此我在读取/写入这些文件时使用通用 ios::binary 标志。 示例代码如下:
std::fstream inf( "ex.txt", std::ios::in | std::ios::binary);
char c;
while( inf >> c ) {
// writing to another file in binary format
}
我遇到的问题是,对于包含文本的文件,这些文本文件中的行尾字符不会被写入输出文件。
编辑:或者至少它们看起来不像打开新写入的文件时那样,只有一个连续的字符行。
再次编辑:即使在文本模式下进行读/写,(连续字符串的)问题似乎仍然存在。
因此,我想知道是否有一种方法可以检查文件是否包含文本或二进制文件,然后适当地读/写它。否则,有什么方法可以在以二进制格式打开文件时保留行尾字符?
编辑:我使用的是 g++ 4.8.2 编译器
【问题讨论】:
-
newlines 没有被转移?你确定吗?我很确定这将严重偏离标准。二进制模式应按原样复制所有内容,包括文件中存在的任何换行符编码,
LF/CRLF/LFCR/etc。 -
你用的是什么编译器?
-
在上面添加了更多信息
-
如果您只想在目录之间复制文件,您可以随时使用
dest << src.rdbuf();。 (ps:记得在这样做之前src.clear(); src.seekg(0);) -
在两种阅读模式下的行为相同(gcc 4.9.3) 作为一种解决方法,可以使用
istream::get()方法(刚刚检查过)。我不完全明白为什么,但似乎在使用>>时,程序会尝试读取格式化的输入,而 文本模式 确实是这种情况,但我不知道为什么会这样实际上是二进制模式的情况。