fstream

在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();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值