当前位置:编程学习 > C/C++ >>

c++文件处理

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。即便是编程时给错了打开方式也不会出问题。
例如:构造输入文件流对象时,用的打开模式却是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(&

补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,