当前位置: 首页 > 编程笔记 >

C++Fstream文件流与freopen重定向操作教程

狄英哲
2023-03-14
本文向大家介绍C++Fstream文件流与freopen重定向操作教程,包括了C++Fstream文件流与freopen重定向操作教程的使用技巧和注意事项,需要的朋友参考一下

大家好,这是我第一次写博客,请大家多多支持!
本文是作者原创文章,写了好几个小时,所以麻烦转载请注明出处!

目录freopen重定向fstream文件流freopen 重定向

使用方法

freopen(“in.txt”,“r”,stdin);//从in.txt读入
freopen(“out.txt”,“w”,stdout);//向out.txt输出
freopen(“CON”,“r”,stdin);//从控制台读入
freopen(“CON”,“w”,stdout);//向控制台输出
fclose(stdin);//关闭输入,可以省略,但建议加上
fclose(stdout);//关闭输出,可以省略,但建议加上

默认是从控制台(Command)读入,输出哦!

实例

#include<iostream>
#include<cstdio>//freopen要包含cstdio头文件
using namespace std;

int main() {
	freopen("in.txt","r",stdin);//从in.txt读入
	freopen("out.txt","w",stdout);//向out.txt输出
	int a;
	cin >> a;
	cout << a;
	fclose(stdin);//关闭输入,可以省略,但建议加上
	fclose(stdout);//关闭输出,可以省略,但建议加上
	return 0;
}

代码写好了,我们编译,但先不要运行。
然后再新建in.txt,往里面写上666,保存,退出。


然后我们运行main.exe,然后打开out.txt(可能有2,3秒的延迟,刷新即可)


瞧,成功了!

更多

stdin:标准输入
stdout:标准输出
“r”:Read,读
“w”,Write,写
由于fopen比较麻烦,我就不赘述了,可以去看其他博主的文章。
可以看一下这两篇:  博客

博客还有fread和fwrite,大家可以借鉴以下。

优缺点

使用方便,但不能方便在控制台与文件之间转换,且使用后system(“cls”)清屏会失效。

fstream文件流
要使用fstream,您需要:

#include<fstream>
using namespace std;

两个构造函数的原型:

basic_ifstream(const char* __s, ios_base::openmode __mode = ios_base::in)
basic_ofstream(const char* __s, ios_base::openmode __mode = ios_base::out|ios_base::trunc)

__s代表文件名,如"in.txt",也可以是绝对路径,但最好不要有中文和空格。(前面freopen也是一样)
ios_base::openmode即打开属性,可以是下面几种值:

ios::in 输入(ifstream默认)
ios::out 输出(ofstream默认)
ios::app(append)附加在末尾
ios::ate(at end)从末尾开始
ios::trunc有则覆盖,无则创建
ios::nocreate如字面意思,如不存在则打开失败
ios::noreplace如字面意思,如存在则打开失败
ios::binary以二进制形式打开/关闭,一般都会被忽略
如果要叠加多个属性,用位或运算符 | 连接即可。

实例

#include<iostream>
#include<fstream>//fstream
using namespace std;

int main() {
	ifstream fin("in.txt", ios::in/*可以省略*/);
	ofstream fout("out.txt", ios::out | ios::trunc/*可以省略*/);
	int a;
	fin >> a;
	fout << a << endl;
	fin.close();
	fout.close();
	return 0;
}

和刚刚结果一样,就不放图片了。
ifstream fin是创建了一个ifstream对象(就像cin是iostream已经帮我们创建的一个istream对象)
ofstream fout和上面差不多。
.close()一定要加!不然可能出错!!!
这里这么取名,只是本人习惯,大家起其他的也行。

成员函数

fstream的成员函数是真心多啊,怪不得功能强大!
这里只给大家介绍一些常用的。
这里只给大家介绍istream,ostream基本一样。

fin.open(const char* __s, ios_base::openmode __mode = ios_base::in);

和构造函数差不多,不解释了。

if (!fin/*或fin.bad()或!fin.good()*/) {
	cout << "Unable to open!" << endl;
	return 0;
}

这个也很好懂,不解释。

fin.eof()
fin.fail()
fin.bad()
fin.good()

四个函数返回值都是bool。
如果遇到文件末尾,则eof返回true。
如果操作失败,则fail返回true。
如果eof和fail都返回false,则bad返回false。
如果bad返回false,则good返回true。
很绕,是不是!其实,根据字面意思,都很好懂。
还有各种各样的功能,请大家自己去探索吧!
再给大家推荐一个博客吧,大家自己去看:博客
还有,希望大家养成一个好习惯,再打开文件后,使用

if(!fin) cout << "Fin open Fail" << endl;
if(!fout) cout << "Fout open Fail" << endl;

来检测是否成功!这样做最保险!

优缺点
操作较为麻烦。但是功能挺多的,且十分强大!

总结

到此这篇关于C++Fstream文件流与freopen重定向操作教程的文章就介绍到这了,更多相关C++ Fstream文件流与freopen重定向内容请搜索小牛知识库以前的文章或继续浏览下面的相关文章希望大家以后多多支持小牛知识库!

 类似资料:
  • 本文向大家介绍C++中输入输出流及文件流操作总结,包括了C++中输入输出流及文件流操作总结的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了C++中输入输出流及文件流操作笔记,供大家参考,具体内容如下 1、流的控制     iomanip          在使用格式化I/O时应包含此头文件。     stdiostream   用于混合使用C和C + +的I/O机制时,例如想将C程序

  • 使用 Project.file() 方法能够相对项目目录定位一个文件 例 16.1. 定位文件 build.gradle // 使用一个相对路径 File configFile = file('src/config.xml') // 使用一个绝对路径 configFile = file(configFile.absolutePath) // 使用一个项目路径的文件对象 configFile = f

  • 我是一个使用ASP.NET MVC5的新手。我需要对控制器进行Jquery调用,以返回一个传递单个参数的新视图。我可以看到很多类似MVC3和之前版本的例子,但却很难找到任何处理MVC4或MVC5并起作用的例子。我所要做的就是从输入元素获取一个值,将其传递给控制器ActionResult,然后打开一个新视图。 PageTwo是视图,Home是控制器。 我试过的代码(包括许多其他代码)通常在404:

  • 我正在使用fstream库来处理文件。基本上,我需要知道某个文件是否存在。在c留档online中,关于open(),它是这样的: 返回值 没有一个 如果函数无法打开文件,则会为流设置failbit状态标志(如果使用成员异常注册该状态标志,则可能引发ios\U base::failure)。 它说没有指定返回值。但在失败的情况下,会设置一个标志。我的问题是,我应该访问该标志,或者更好地问,我应该如何

  • 我想知道301和307重定向之间的区别。 我希望通过自制url重定向器生成反向链接,我希望任何“链接果汁”或“页面排名果汁”都能直接从原始主页流向最终url,但如果其中一个原始主页出现问题,我希望能够通过删除该特定页面的重定向链接来关闭该链接。有道理? 我的理解是,301是永久性的,这意味着谷歌将看到301并更新其缓存的URL作为最终目的地,而不管我以后是否取消重定向。 如果我使用307,它将不会

  • 问题内容: 我C编码的一个基本的壳,用于执行基本命令它会执行命令,,等。 我想在我的外壳中执行以下命令。喜欢 ; 这将给我包含过程输出的文件。我找到了一个解决方案,它正在像这样更改shell中的命令。在这种情况下,它将更改为。但是此过程会将输出也提供给文件和终端。如何在终端中停止打印输出。 还是有比使用tee命令更好的解决方案。提前致谢… 问题答案: 这是我用dup2测试的结果 更微妙的一点是在正