1. c++对文件的操作是由文件流类完成的,文件流类在流类与文件间建立连接;
2. 文件流类型
①文件输入流:ifstream
②文件输出流:ofstream
③文件输入/输出流:fstream
3. 语法
①定义文件流类的对象
ifstream ifile; //定义了一个文件输入流对象;
ofstream ofile; //定义了一个文件输出流对象;
fstream iofile; //定义了一个文件输出/输入流对象;
②文件的打开方式
ifstream → ios::in
ofstream → ios::out|ios::trunc
fstream → ios::in|ios::out|ios::app
③文件打开示例
ifstream ifs("xxx.txt", ios::in);
if(!ifs)
{
cout<<"open error ifs"<
4. 文件中get()与getline()两个成员函数之间的区别
①get()遇到设置的终止符会停止,且不会从流中提取终止符,也不会越过终止符;
②getline()则会越过终止符(例如‘\n’),但是仍然不会把它放到缓冲区,比如在文件拷贝过程中设置了终止符是'\n',那么则需要在每次写入后在写入一个‘\n’;
5. 其他一些函数
①ignore():用于跳过流中的n个字符,或者遇到结束字符位置;
②int peek():窥视最近一次移动的指针,即向后看一下下一个字符是什么;实际并不改变文件读写位置;
③putback(char c):将字符c插入到当前的指针位置;
④close():成员函数,用来关闭文件;
6. 随机读写函数,即随机移动文件指针,下文有示例
tellg() //返回当前指针位置,输入流操作
seekg(绝对位置) //输入数值,进行绝对移动
seekg(相对位置,参照位置) //相对于参照位置进行移动
seekp(绝对位置) //输入数值,进行绝对移动
seekp(相对位置,参照位置) //相对于参照位置进行移动
tellp(); //返回当前指针位置,输出流操作
//参照位置的三种方式:
ios::beg //相对于文件头
ios::cur //相对于当前位置
ios::end //相对于文件尾
#include
#include
#include
using namespace std;
int main(int argc, char **argv)
{
fstream fs(argv[1], ios::in | ios::out | ios::trunc);
assert(fs);
char buf[100];
fs<<"aabbccdd";
fs.seekg(0,ios::beg); //将文件指针定位在开头
fs>>buf;
cout<<"buf : "<
7. 文件拷贝程序,两个版本,分别是file.get()、file.getline();
file.get():
#include
#include
#include
#include
using namespace std;
int main(int argc, char ** argv)
{
fstream from_file(argv[1],ios::in);
if(!from_file)
{
cout<<"open from_file failed"<
file.getline():
#include
#include
#include
#include
#include
using namespace std;
int main(int argc, char **argv)
{
ifstream in_file(argv[1],ios::in);
assert(in_file);
ofstream out_file(argv[2],ios::out|ios::trunc);
assert(out_file);
char buf[1024];
while(!(in_file.eof())) //file.eof代表文件尾
{
memset(buf,0,sizeof(buf));
in_file.getline(buf,sizeof(buf),'\n'); //getline会跳过终止符
out_file.write(buf,strlen(buf));
out_file<<'\n'; //每次补充一个\n进去;
}
in_file.close();
out_file.close();
return 0;
}