对于如何使用fstream管理文件流,我有点困惑。以下是我的主要问题:
1)首先,为什么在没有任何标记的情况下调用构造函数fstream file(file_name);或fstream file; file.open(file_name); (比如ios::in或ios::out )不创建任何新文件?
2)假设我想使用相同的文件进行输入和输出。我可以执行类似fstream file的操作,然后在需要将其单独用于输出或输入操作时调用file.open(file_name, ios::out)或file.open(file_name, ios::in)。但是如果我需要同时进行输入和输出呢?例如,当我在阅读时发现一个特定的单词或数字时,我需要从一个文件中读取并替换一行或一个字符。是否可以为已经创建的文件(并且不指定任何标志)调用file.open(file_name)?它允许我用相同的流进行读写操作吗?
发布于 2016-03-09 19:09:30
以下是我的答案:
1)首先,为什么调用构造函数fstream文件(File_name);或者fstream文件;file.open(file_name);如果没有任何像ios::in或ios::out这样的标志,就不会创建任何新文件?
在发生写操作之前,不需要创建文件。这是延迟处理。
如果默认情况可能是使用读取权限打开文件,则不需要创建文件。据我所知,打开一个只读文件永远不会创建一个文件。
阅读那些情况下的默认模式。
2)假设我想使用相同的文件进行输入和输出。我可以执行类似fstream文件的操作,然后在需要单独用于输出或输入操作时调用file.open(file_name,ios::out)或file.open(file_name,ios::in)。但是如果我需要同时进行输入和输出呢?
如果需要对同一个文件执行读写操作,请同时使用ios::in和ios::out模式:ios::out | ios::in打开它。这是通知流您想要使用相同的流(文件)来写和读。这是允许的,至少自从C语言被发明以来。
顺便说一句,你应该澄清“同时”。除了涉及多个处理器(核心)时,计算机上的大多数东西都是顺序的。大多数文件是连续的,这意味着只有一个源可以读取或写入文件。虽然也有一些例外。
许多文件被视为数组。你可以多次读和写同一段。这被称为随机访问,而设备是sequential access。
发布于 2016-03-09 19:07:07
这是非常可行的,使用ifstream和ofstream:
#include <fstream>
using namespace std;
int main() {
ifstream source("source-file.txt");
ofstream destination("source-file.txt");
int x; // 0
int y = 1;
source >> x; // Reads one int from source-file.txt
source.close(); // Always close file when finished
destination << y; // Write to source-file.txt
return 0;
} // destination.close() called by destructor想象一条小溪就像一根稻草。你不能同时喝和吹吸管。喝一口,停,吹回去,重复一遍。
https://stackoverflow.com/questions/35899874
复制相似问题