打开文件进行读写,不存在则创建

问题描述 投票:0回答:2

我尝试在读取和写入模式下创建文件,但它没有创建文件,可能是什么问题?

这是代码:

fstream file("NameFile.txt", ios::out| ios::in);

程序将启动,但不会创建任何文件。

c++ file
2个回答
4
投票

当您使用

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;

这会在读取文件之前将读取位置指示器重置为文件的开头。

基本上,您需要注意指示器的位置,以免读取或写入错误的位置。


参考资料:

https://en.cppreference.com/w/cpp/io/basic_fstream


0
投票

好了,您初始化了一个对象,现在创建一个文件使用

file.open();

fstream 不会创建文件

© www.soinside.com 2019 - 2024. All rights reserved.