设为首页 加入收藏

TOP

c++文件处理(一)
2012-11-03 14:40:15 来源: 作者: 【 】 浏览:2079
Tags:文件 处理

  1.文件分类
  
  按照文件的存取方式分
  
  顺序文件:结构简单,文件中的数据按顺序存放。在顺序文件中,只知道第一条记录的存放位置。当要查找某条记录时,只能从文件头开始,按顺序查找,直到找到为止。
  
  随机文件:又称直接存取文件,简称随机文件或直接文件。随机文件的每条记录都 有一个记录号,即在写入数据时,只要指定记录号,就可以把数据写到指定的位置。在读取文件时,只要给出记录号,就可以直接读取。
  
  按照数据编码方式分
  
  文本文件:是按ASCII码进行编码的文件,可以用字处理软件建立和修改(必须以纯文本文件保存)
  
  二进制文件:顾名思义,以按二进制编码的文件,不能用普通的字处理软件编辑,占空间较小。
  
  1.1 文件操作的过程
  
  用户程序在处理文件时,只需遵从如下的步骤即可:
  
  1)打开文件。
  
  2)读取文件。
  
  3)处理数据。
  
  4)写回(根据需要)
  
  5)关闭文件。
  
  1.2 处理文件流的类
  
  在C中,处理文件必须通过一个结构体FILE.这个结构体的主要内容就是文件名、文件起始位置、大小、当前读写位置信息等信息。在处理文件的过程中,用户程序必须要通过这个结构体进行。如果打开文件 用fopen()函数、读数据的fprintf()函数、关闭文件的fclose()函数等。
  
  例如:
  
  [cpp]
  
  #include<iostream>
  
  using namespace std;
  
  int main()
  
  {
  
  FILE *pFile=fopen(“a.txt”,“r+”);//以读写方式打开文件
  
  if(NULL == pFile)//文件是否存在
  
  {
  
  cout《“打开文件失败”《endl;
  
  system(“pause”);
  
  return 0;
  
  }
  
  char str[256];
  
  while(EOF!=fscanf(pFile,“%s”,str))//读取文件内容,以空格或者回车分隔
  
  {
  
  cout《str《endl;//输出一行
  
  }
  
  fprintf(pFile,“END”);//在文件尾部写入“END”
  
  fclose(pFile);//关闭文件
  
  system(“pause”);
  
  return 0;
  
  }
  
  写完后文档内容如下:
  
  事实上,通过FILE结构对文件进行操作并不是很理想。主要是因为这么做并不符合面向对象的思想。因此,c++提供了一系列专门用于处理文件的文件流类。这些类包括专门用于从文件中输入数据的ifstream类,专门用于向文件输出数据的ofstream类,以及即可输入也可以输出的fstream类。
  
  需要注意的是,文件编码有ASCII码和UNICODE编码之分,相应的处理文件的类也有这样的分别。上述的ifstream、ofstream和fstream类都是用于处理ASCII编码的文件。如果要处理UNICODE编码的文件,则应当使用对应的wifstream、wofstream和wfstream.以下只针对ASCII码格式的文件流类进行说明。
  
  文件流例1:
  
  [cpp]
  
  #include<iostream>
  
  #include<fstream>
  
  //#include<cstdlib>
  
  //#include<cstdio>
  
  //#include<stdio.h>
  
  using namespace std;
  
  int main()
  
  {
  
  fstream file;
  
  file.open(“a.txt”);//没有指定打开方式,默认是读写。
  
  if ( file.fail() )
  
  {
  
  cout《“打开文件失败”《endl;
  
  system(“pause”);
  
  return 0;
  
  }
  
  char str[256];
  
  while(file》str)
  
  {
  
  cout《str《endl;
  
  }
  
  file 《 “fstream”;//没有写进去,为什么????
  
  file.close();
  
  system(“pause”);
  
  return 0;
  
  }
  
  2.文件的打开与关闭
  
  首先是创建流,然后把流和文件关联,才能进行输入、输出操作,完成后要关闭文件。
  
  三个输入输出流类:ofstream,ifstream,fstream.
  
  2.1打开文件
  
  打开文件就是用函数open()把某一个流与文件建立联系。open()函数是上述三个流类的成员函数,定义在fstream.h中,它的原型为
  
  void open(const unsigned char * ,int mode,int access=filefuf::openprot);
  
  其中,第一个参数为字符串类型,其用来传递文件名。第二个参数是int型,其值决定文件撕开的方式,用数据流基类ios_base的数据成员指定。一般来讲每种流都有固定的打开模式。如输入文件流ifstream就是ios_base::in,输出文件流ofstream就是ios_base::out.即便是编程(www.cppentry.com)时给错了打开方式也不会出问题。
  
  例如:构造输入文件流对象时,用的打开模式却是ios_base::out.这种情况下并不会影响文件的读入。同时也不要企图向文件中写入数据,因为输入文件流ifstream没有输出函数。第三个参数的值决定文件的访问方式及文件的类别,默认方式是filebuf::openprot.在DOS/Windows环境中,access的值分别对应DOS/Windows的文件属性代码如下:
  
  [cpp]
  
  0 普通文件
  
  1 只读文件
  
  2 隐含文件
  
  3 系统文件
  
  8 备份文件
  
  例2:在当前文件夹下创建一个文本文件,并向其中写入一个字条串。
  
  [cpp]
  
  #include<iostream>
  
  #include<fstream>
  
  using namespace std;
  
  int main()
  
  {
  
  ofstream sfile(“sssfile.txt”);
  
  sfile《“Hello world”《endl;
  
  system(“pause”);
  
  }
  
  例3:创建一个文件,然后打开该文件,如果文件不存在,则返回错误信息;否则提示文件已打开的信息。
  
  [cpp]
  
  #include<iostream>
  
  #include<fstream>
  
  using namespace std;
  
  int main()
  
  {
  
  ofstream ofile(“file1.txt”);
  
  ifstream ifile;
  
  ofile《“welcome to China”;
  
  ifile.open(“file1.txt”);
  
  if(ifile.fail())
  
  cout《“文件不存在,打开失败!”《endl;
  
  else
  
  cout《“文件已打开,可以进行读写操作”《endl;
  
  ifile.close();
  
  system(“pause”);
  
  return 0;
  
  }
  
  2.2关闭文件
  
  文件使用后,必须将其关闭,否则可能导致数据丢失。关闭文件就是将文件与流的联系断开,用函数close()完成,它也是流类中的成员函数,没有参数,没有返回值,其参数原型为:
  
  对象名。close()
  
  例:下面程序用open()函数打开一个文件,并判断其是否打开,但不管其是否打开成功,在程序结束时均需要关闭文件。
  
  [cpp]
  
  #include <fstream>
  
  #include <iostream>
  
  using namespace std;
  
  int main()
  
  {
  
  ifstream in;
  
  in.open(“file1.txt”);
  
  if (in.fail())
  
  cout《“文件不存在,打开失败”《endl;
  
  else
  
  cout《“文件已打开,可以进行读写操作”《endl;
  
  in.close();
  
  cout《“文件已关闭”《endl;
  
  system(“pause”);
  
  return 0;
  
  }
  
  fail()函数是流类中的成员函数,可用该函数测试文件是否存在。若存在,返回0,否则返回非0.
  
  在程序语句中,可将定义流与打开文件用一条语句完成,如:
  
  [cpp]
  
  #include <fstream.h>
  
  #include <iostream>
  
  using namespace std;
  
  int main()
  
  {
  
  // fstream f(“testf.txt”,ios::in|ios::out);//如果只是fstream f(“testf.txt”);不会创建文件。要如此行代码或者fstream f(“testf.txt”,ios::out)
  
  ofstream f(“testf.txt”,ios::out);//ofstream默认就是out.所以ofstream f(“testf.txt”)与本行代码一个效果
  
  f《“helloworld”《endl;
  
  system(“pause”);
  
  }
  
  一般情况下,ifstream和ofstream流类的析构函数就可以自动关闭已打开的文件,但若需要使用同一个流对象打开的文件,则需要首先用close()函数关闭当前文件。
  
  3.文件的顺序读写
  
  3.1读写文本文件
  
  对文本文件进行读写时,先要以某种方式打开文件,然后使用运算符“《”和“>>”进行操作,同时必须将运算符“《”和“》”前的cin和cout与文件关联的流代替。
  
  下面程序先向文件test.txt中写入三行数据,再将该文件打开,并将写入的数据依次输出到屏幕。
  
  [cpp]
  
  #include<fstream.h>
  
  #include<iostream>
  
  using namespace std;
  
  int main()
  
  {
  
  ofstream fout(“test.txt”);
  
  if (!fout)//创建失败
  
  {
  
  cout《“不能打开输出文件。”《endl;
  
  return 1;
  
  }
  
  fout《“HelloWorld”《endl;//注意这HelloWorld中间没有空格
  
  fout《10《endl;
  
  fout《hex《10《endl;
  
  fout.close();
  
  ifstream fin(“test.txt”);
  
  if (!fin)
  
  {
  
  cout《“不能打开输入文件”《endl;
  
  return 1;
  
  }
  
  char c[20];
  
  int i;
  
  char ch;
  
  fin》c;
  
  fin》i;
  
  fin》ch;
  
  cout《c《endl;
  
  cout《i《endl;
  
  cout《ch《endl;
  
  fin.close();
  
  system(“pause”);
  
  return 0;
  
  }
  

     

首页 上一页 1 2 3 4 5 6 7 下一页 尾页 1/10/10
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Codeforces 225D Snake.. 下一篇字符串字典顺序比较

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: