用std :: fstream重新打开文件后清除文件

时间:2018-12-07 07:39:50

标签: c++ std filestream fstream

我想打开一个文件进行读取,将其关闭,然后再次打开该文件以使用相同的std :: fstream进行写入。但是,当我以写许可权重新打开文件时,内部的所有数据都将被清除,并且它的长度为0个字节。 这是我的代码:

char* data = new char[5];
std::fstream fs("myFile", std::ios::binary | std::ios::in);//opening with read
fs.read(data, 5);
fs.clear();
fs.close();
//Do some stuff
fs.open("myFile", std::ios::binary | std::ios::out);//opening with write
//The file is already empty at this point

1 个答案:

答案 0 :(得分:4)

使用默认的 write 标志打开文件时,即使用std::ios::out工具使用<iostream>或使用"w"函数使用<cstdio>打开文件时,背后有POSIX标志的组合-添加了 truncate 标志。这意味着在以写模式打开时,文件内容将被丢弃。为了避免这种情况,请使用

第二次打开文件
fs.open("myFile", std::ios::binary | std::ios::app);

追加模式在每次写操作时将文件光标移动到文件末尾,并且不与 truncate 标志结合使用,请参见here。请注意,当您要写入现有文件中的任意位置时,需要使用

打开它
fs.open("myFile", std::ios::binary | std::ios::in | std::ios::out);

不会截断其内容,并允许使用seek*函数进行光标定位。