c++文件操作

文件分为:文本文件、二进制文件

1.定义文件对象
fstream file //可读可写
ifstream file //可读不可写
ofstream file //可写不可读

2.打开文件
ifstream file;
file.open("c:\\file.txt"); //与文件关联
ofstream file;
file.open("d:\\file.txt");//与文件关联

3.读写文件
Std::string str;
Infile>>str; //从文件流中输入
Outfile<<str;

4.关闭文件
Infile.close();
Outfile.close();
关闭后释放文件对象,取消与文件的关联。

 

/***************************************************/

定义fstream对象后,既可以对文件读又可以写。因此在
open时需要给定打开的方式:
fstream file1,file2;
file1.open("file1.txt",ios::in);//用于输入
file2.open("file2.txt",ios::out);//用于输出

在open是常常会因为文件不存在,或正在被占用而打开失败。
可以通过对文件对象进行判断来得知是否打开成功。
file1.open("file.txt",ios::in);
if(!file1)
{
   cout<<"file failed"endl;
}

/************************************************/

有一个约定:

打开文件进行读时,若文件不存在则打开失败。

打开文件进行写时,若文件不存在则新建一个文件。若存在则删除原来的文件内容。 

/*****************************************************/

文本文件与二进制文件读取方法不同:

读写文本文件
从文件读取一个字符:file.getch(ch);
读取一行数据:File.getline(str);
从文件读取时,当读取到文件尾时,函数返回值为0,可以据此来判断循环结束。 
向文件写入一个字符:file.put(ch);

拷贝一个txt文件内容到另一个新建txt
#include<iostream>
#include<fstream>
using namespace std;

int main(void)
{
ifstream infile;
ofstream outfile;
infile.open("H:\\visual 2012\\test\\myfile.txt");
outfile.open("H:\\visual 2012\\test
\file_copy.txt");
if(!infile || !outfile)
{
cout<<"未能打开文件"<<endl;
return 0;
}
char ch;
while(infile.get(ch))
{
cout<<ch;
outfile.put(ch);
}
infile.close();
outfile.close();
system("pause");
return 0;
}

/********************************************************/

打开二进制文件
若在文件的open方法时没有特别说明,默认打开的文本文件,若要打开二进制文件,则要特别说明。 
fstream infile,outfile;
infile.open("inf1.dat",ios::in| ios::binary);
outfile.open("outf1.dat",ios::out| ios::binary);

ios::out和ios::in  表示IO模式。

枚举类型,多个枚举值可以
使用运算符"|"组合使用。

二进制文件的关闭
关闭方法都一样,调用close方法。

二进制文件的读写
二进制文件的读写与文本文件不同,使用专门的方法。
infile.read(char *buff,int nNum);
buff存储数据的缓冲,nNum为要读取的长度
infile.read(&Stuinfo,sizeof(Stuinfo));
infile.read(pBuff,1024*sizeof(char));

向文件写入数据:
outfile.write(pBuff,nLen);

二进制文件的结束
infile.eof()
当文件结束位置时,该函数返回一个非零值;否则返回零。

文件指针
打开文件之后,读取或写入一段数据之后,文件指针都会移动
到读取或者写入的数据的末尾。
如file.read(pBuff,1024);
读取成功之后,文件指针向后偏移1024字节。

file.write(pBuff,10);
写入成功之后,文件指针向后偏移10个字节。

读写方法可以自动的移动文件指针,除此之外还可以通过一个
专门的函数随机的移动文件指针。
infile.seekg(nNum,ios::cur);
nNum为移动的字节数。
ios::cur表示从当前位置。还有另外两个相对位置:
ios::begin,ios::end;
infile.seekg(10,ios::begin);//相对文件开始将文件指针
移动10个字节。
infile.seekg(-2,ios::end);相对文件结束,向前移动20字


实例,实现两个二进制文件的拷贝。
#include<iostream>
#include<fstream>
using namespace std;

int main(void)
{
ifstream infile;
ofstream outfile;
infile.open("H:\\visual 2012\\test
\testb.dat",ios::in|ios::binary);
outfile.open("H:\\visual 2012\\test
\testb_copy.dat",ios::out|ios::binary);
if(!infile || !outfile)
{
cout<<"未能打开文件"<<endl;
return 0;
}
char buff[1024];
while(!infile.eof())
{
infile.read(buff,1024);
int nLen=infile.gcount();
outfile.write(buff,nLen);
}
infile.close();
outfile.close();
cout<<"copy sucess!"<<endl;
system("pause");
return 0;
}


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。