标签:
1 简单读写文件
1 #include <fstream> 2 ofstream //文件写操作 内存写入存储设备 3 ifstream //文件读操作,存储设备读区到内存中 4 fstream //读写操作,对打开的文件可进行读写操作
写文件用ofstream和ostream方法(如<<),读文件用ifstream和istream方法(如>>),读写文件可以用fstream,具体步骤个人总结为三步走:
写文件:
1.创建一个ofstream对象 ofstream out;
2.将对象与文件进行关联 out.open("1.txt");
3.用cout方式使用该对象 out<<"123456";
其中前两步可以合并为ofstream out("1.txt");
读文件:
1.创建一个ifstream对象 ifstream in;
2.将对象与文件进行关联 in.open("1.txt");
3.用cout方式使用该对象 string x; int>>x;
其中前两步可以合并为ifstream in("1.txt");
注意:对象名称可以随意命名,不一定非得是in或out。
文件读写完毕后文件自动关闭,亦可显示的关闭文件的连接,比如in.close();
2 文件模式
无论是使用文件名初始化文件流对象还是使用open()方法,都可以指定文件模式的第二个参数
ios::in 打开文件以便读取
ios::out 打开文件以便写入
ios::ate 打开文件移动到文件尾
ios::app 内容追加到文件尾
ios::trunc 删除之前内容再写入
ios::binary 二进制文件
这些方式是能够进行组合使用的,以“或”运算(“|”)的方式:例如
1 fstream out("Hello.txt", ios::in|ios::out)
3 一个复制文件的例子
1 #include <iostream> 2 #include <fstream> 3 #include <cstdlib> 4 5 using namespace std; 6 void cpf(char *a,char *b); 7 8 int main() 9 { 10 char sourcefile[100]; 11 char copyfile[100]; 12 cout<<"请输入要复制的文件路径"<<endl; 13 cin>>sourcefile; 14 cout<<"请输入要粘贴的文件路径"<<endl; 15 cin>>copyfile; 16 17 cpf(sourcefile,copyfile); 18 19 return 0; 20 } 21 22 void cpf(char *a,char *b) 23 { 24 fstream in(a,ios::in | ios::binary); 25 if(!in.is_open()) 26 { 27 cerr<<"源文件不存在"<<endl; 28 exit(EXIT_FAILURE); 29 } 30 fstream out(b,ios::out | ios::binary); 31 if(!in.is_open()) 32 { 33 cerr<<"路径错误"<<endl; 34 exit(EXIT_FAILURE); 35 } 36 out<<in.rdbuf(); 37 cout<<"文件复制成功"<<endl; 38 }
需要注意的地方
1.文件路径是char数组,传递参数时应该将形参设为指针
2.复制文件应该用ios::binary(二进制模式),原因是使用二进制文件模式时,程序将数据从内存传递给文件,将不会发生任何隐藏的转换,而默认状态下是文本模式,复制的内容可能会发生改变(参见c++ primer plusP695)
3.关于 rebuf():复制文件时是从一个流对象复制流入另外一个流对象,需要使用rebuf(),rebuf()的功能就是使流重定向
4.exit(EXIT_FAILURE)相当于exit(1),exit(EXIT_SUCCESS)相当于exit(0)
标签:
原文地址:http://www.cnblogs.com/raichen/p/4350664.html