我想打开一个文件进行读取,将其关闭,然后再次打开该文件以使用相同的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
答案 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*
函数进行光标定位。