我正在使用 ifstream
打开一个文件来检查它是否存在。然后我关闭它并使用 ofstream
打开它来写入它,我认为设置 ios::trunc
标志允许我覆盖它。
但是,如果文件存在,我希望能够保持文件打开状态,但我使用了 ifstream
来打开它,这是否意味着我无法写入该文件,直到我关闭并使用 fstream
或 ofstream
重新打开?我一开始就没有使用 fstream,因为它无法告诉我该文件是否已经存在。
最佳答案
只需在文件上打开一个读写fstream
即可。您可以通过查找末尾并查看偏移量是否为非零来测试文件以前是否存在(并且非空)。如果是这样,则该文件存在,您可以使用它执行任何操作。如果不是,则该文件不存在或为空。假设您不需要区分这两种情况,则可以像它不存在一样继续操作。
例如:
// Error checking omitted for expository purposes
std::fstream f("file.txt", std::ios::in | std::ios::out);
f.seekg(0, std::ios::end)
bool didFileExist = (f.tellg() > 0);
f.seekg(0, std::ios::beg);
// Now use the file in read-write mode. If didFileExist is true, then the
// file previously existed (and has not yet been modified)
关于C++ 覆盖已经打开的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7436582/