首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Fstream管理问题

Fstream管理问题
EN

Stack Overflow用户
提问于 2016-03-09 18:37:48
回答 2查看 139关注 0票数 1

对于如何使用fstream管理文件流,我有点困惑。以下是我的主要问题:

1)首先,为什么在没有任何标记的情况下调用构造函数fstream file(file_name);fstream file; file.open(file_name); (比如ios::inios::out )不创建任何新文件?

2)假设我想使用相同的文件进行输入和输出。我可以执行类似fstream file的操作,然后在需要将其单独用于输出或输入操作时调用file.open(file_name, ios::out)file.open(file_name, ios::in)。但是如果我需要同时进行输入和输出呢?例如,当我在阅读时发现一个特定的单词或数字时,我需要从一个文件中读取并替换一行或一个字符。是否可以为已经创建的文件(并且不指定任何标志)调用file.open(file_name)?它允许我用相同的流进行读写操作吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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::inios::out模式:ios::out | ios::in打开它。这是通知流您想要使用相同的流(文件)来写和读。这是允许的,至少自从C语言被发明以来。

顺便说一句,你应该澄清“同时”。除了涉及多个处理器(核心)时,计算机上的大多数东西都是顺序的。大多数文件是连续的,这意味着只有一个源可以读取或写入文件。虽然也有一些例外。

许多文件被视为数组。你可以多次读和写同一段。这被称为随机访问,而设备是sequential access

票数 1
EN

Stack Overflow用户

发布于 2016-03-09 19:07:07

这是非常可行的,使用ifstream和ofstream:

代码语言:javascript
复制
#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

想象一条小溪就像一根稻草。你不能同时喝和吹吸管。喝一口,停,吹回去,重复一遍。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35899874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档