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;
}
 
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号