在C++中,计算机常见的获取数据方法除了从键盘输入,还可以读取文件
在操作时,需导入fstream
istream//文件输入流,用于从文件读取信息
ofstream//文件输出流,用于创建文件并向文件写入信息,文件不存在时自动创建
fstream//同时具有ifstream和ofstream的功能
文件的打开模式可以通过open函数指定,打开文件的标准语法:
void open(const char* filename,ios::openmode mode);
常用的打开模式:
ios::app//追加模式,所有写入都追加到文件末尾
ios::ate//文件打开后定位到文件末尾
ios::in//打开文件用于读取
ios::out//打开文件用于写入
ios::trunc//如果文件已经存在,则在打开文件之前清空其内容
ios::nocreate//文件不存在时产生错误,常和in或app联用
ios::noreplace//文件存在时产生错误,常和out联用
ios::binary//以二进制的形式打开文件
例如:
ifstream ifs("a.txt");//默认以ios::in模式打开
ofstram ofs("a.txt")//默认以ios::out模式打开
ifstream ifs("a.txt",ios::ate)//以ios::ate模式打开a.txt
可以同时用多种模式打开文件,中间用|连接
ofstream ofs("a.txt",ios::binary|ios::ate)//以binary和ate模式打开文件
创建时可以将括号后的内容省略,如:
fstream fs;
或:
fstream fs();
后期如果想要打开文件,可以使用open函数
fstream fs();
fs.open("a.txt",ios::ate);
判段文件是否打开可以用一下方法:
if(ifs.is_open()){
//......
}else return 0;
//如果文件成功打开,ifs.is_open()值为1,否则为0
读取文件方法:
使用流提取运算符>>可以从文件读取信息,与cin的使用方法类似
ifstream ifs("a.txt");
string data;
ifs>>data;
cout<<data;
也可以使用getline()读取:
string a;
getline(ifs,a);
tellg,tellp,seekg,seekp:
tellg和tellp函数用于获取当前文件指针位置(读取位置),它返回一个类型为streampos的值,表示当前文件指针的位置,streampos通常是一个整数类型,用于表示文件的字节偏移量
ifstream ifs("a.txt",ios::in);
if (ifs.is_open()){
streampos cu=ifs.tellg();
cout<<"当前文件指针位置:"<<cu<<endl;
//读取……获取新的文件指针位置
cu=ifs.tellg();
cout<<cu;
}
tellg和tellp不同的是:
tellg只能用于ifstream和fstream,tellp只能用于ofstream和fstream
sekkg函数用于设置文件指针的位置,以便在文件中进行定位,它允许你将文件指针移动到文件的特点为止,以便读取或写入数据,seekg接受2个参数,第一个参数是偏移量,第二个参数是基准位置,用于确定偏移量是相对于文件的开头,当前位置还是文件的末尾
基准位置可以是一下之一:
ios::beg//基于文件的开头
ios::cur//基于当前文件指针位置
ios::end//基于文件的末尾,第一个参数(偏移量)表示从文件末尾开始向前移动的字节数
如:
ifstream ifs("a.txt",ios::in);
ifs.seekg(10,ios::beg);//将文件指针移动到从文件开头后的10字节
//↓读取从第10个字节开始的内容,读取字符串,直到遇到空格或回车
string data;
ifs>>data;
cout<<data;
seekg与seekp不同的是,seekg只能用于ifstream和fstream,seekp只能用于ofstream和fstream
如果在fstream fs()的括号中直接输入文件名的话,只能检测到与程序路径相同的文件
在C++中,你可以输入路径来打开文件
如:
istream ifs;
ifs.open("C:/a.txt");
如果你想让用户自己输入文件名/路径,可以使用以下操作:
string a;
getline(cin,a);
fstream fs(a.c_str());
c_str()可以让一个字符串实现它的功能
system("cls")//会让运行库中已输出的内容情空
但如果你使用以下操作:
string a="cls";
cout<<111;
system(a);
那这将会报错,但如果你把a改为a.c_str(),那程序就可以正常运行
最后,当你使用完文件后,一定要关闭该文件,这一操作可以用close函数完成
fstream fs("a.txt");
//需要执行的操作...
fs.close();