c语言中,对文件的操作一般通过文件指针FILE*来进行。然而,c++有着更为便捷的操作——文件流。好吧,其实我也不是很熟悉“流”的具体概念,等以后深入学习后,一定会把这个坑填上。
在此简单记录一下文件流fstream的用法;
可以简单得把它看成一个类,包含在头文件<fstream>中。当我们写上#include<fstream>后,就可以使用ifstream,ofstream,fstream三个类来定义对象了。
例如:ifstream infile(); 成功定义了一个名叫infile的对象,可以调用ifstream中的函数;
但是,此时infile只是一个对象,并没有和我们需要读取的文件产生关联。
目前,我发现共有两种方式
1、通过ifstream的函数 .open(),这个函数有几种重载的方式
- 首先,关于路径,一共有5种方式:
- 相对路径,当你所要操作的文件与你的.cpp文件在同一个目录下,就可以使用相对路径,相对路径必须将文件格式写清楚,例如:infile.open("ans.txt");
- 绝对路径,可以搜索到电脑中所有的文件,但路径必须正确,例如:infile.open("D:\Codeblock\test\formulations.txt");
- 可以填入一个是指向字符串文件名的指针,例如:const char* str=”ans.txt"; infile.open(str);
- 可以填写一个内容等于文件名字的string常量,例如:const string str = “ans.txt"; infile.open(str);
- 如果不是const string ,而是string,那必须使用infile(str.c_str()); 此处.c_str()是string的一个成员函数,目标是将string变成const string .关于string和const string 之间的区别嘛,emmmmmm,有空一定填上
-
ios::app //在文件末尾补入 ios::ate //定位到文件末尾,app包含此项属性 ios::binary //以二进制的方式读取文件 ios::in //读文件 ios::out //输入文件 ios::nocreate //不创造,如果文件不存在,则失败 ios::noreplace//不覆盖,如果文件存在,则失败 ios::trunc //如果文件存在,则将文件内容清空
3.多种文件的打开方式能使用或运算("|") ,例如:infile("ans.txt",ios::app | ios::out);
4.打开文件的属性,prot.好像不常用,等哪天用到了,再来写
2. 第二种打开方式则更为简单,利用初始化的方法,例如 ifstream infile("ans.txt");
当然,初始化的时候,也可以加上mode,例如 ifstream infile("ans.txt",ios::app);
.is_open() 的用法
#include <fstream> using namespace std; int mian() { ifstream infile ; infile.open("ans.txt"); if(!infile.is_open()) { cout<<"Wrong"<<endl; return 0; } ....................... return 0; }