我尝试在读取和写入模式下创建文件,但它没有创建文件,可能是什么问题?
这是代码:
fstream file("NameFile.txt", ios::out| ios::in);
程序将启动,但不会创建任何文件。
当您使用
fstream
打开文件时:
要读取该文件需要存在。
要写入,您需要使用所需的标志指定写入模式:
以下代码会在您写入时替换文件的内容(
ofstream
默认模式):
std::fstream file("NameFile.txt", std::ios::out | std::ios::in | std::ios::trunc);
^^^^^^^^^^^^^^^
如果文件不存在,它将创建该文件。
当您写入时,以下代码会附加到文件中的现有数据:
std::fstream file("NameFile.txt", std::ios::out | std::ios::in | std::ios::app);
^^^^^^^^^^^^^
如果文件尚不存在,也会创建该文件。
打开文件以进行写入和读取需要额外注意。例如,假设您想读取以前写入的内容,则需要设置文件中的偏移位置。这是一些代码来说明这一点:
std::string s = "my string";
std::string in;
file << s;
file >> in;
上面的代码中
file >> in
不会读取写入的数据,位置指示器位于file << s
之后的文件末尾,如果要读取之前写入的数据,则需要重置它,例如使用 seekg
:
file << s;
file.seekg(0);
file >> in;
这会在读取文件之前将读取位置指示器重置为文件的开头。
基本上,您需要注意指示器的位置,以免读取或写入错误的位置。
参考资料: