C语言对文件操作的支持

C语言对文件操作的支持

1       C语言对文件操作的支持

在C语言中,对文件的操作是利用FILE结构体进行的。

2       C++对文件操作的支持

在C++中,向文件中写入数据可以使用ofstream类实现,读取数据可以使用ifstream类实现。

3       Win32API对文件操作的支持

Win32API提供了与文件操作相关的函数,这些函数功能强大,利用CreateFile、ReadFile和WriteFile函数完成文件的创建、打开、写入和读取。

4       MFC对文件操作的支持

MFC中提供的支持文件操作的基类是:CFile,该类提供了没有缓存的二进制格式的磁盘文件输入输出功能,通过其派生类能够简介的支持文本文件和内存文件。


1.1 文件的打开(fopen)

FILE  *fopen(const char * Filename, const char *Mode);         
     

第一个参数(Filename)指向文件名字符串的常量指针类型,表明将要打开的文件;第二个参数(Mode)指定文件打开的模式。

文件打开模式

意义

r

为读取而打开,如果文件不存在或不能找到,读取失败。

w

为写入操作打开一个空文件,如果给定的文件已经存在,将被清空。

a

为写入操作打开文件,如果文件已经存在,那么在该文件尾部添加新数据,在写入新数据之前不会移除文件中已有的EOF标记,如果文件不存在,那么首先创建这个文件。

r+

打开文件用于写入操作和读取操作,文件必须存在。

w+

为写入操作和读取操作打开一个空的文件。如果给定文件已经存在,那么它的内容将被清空。

a+

打开文件用于读取操作和添加操作。如果文件不存在,那么首先将创建这个文件。

1.2 文件的写入(fwrite)

size_t fwrite(constvoid * buffer, size_t size, size_t count, FILE * _File);

buffer       -指向将要被写入文件的数据;

size           -以字节为单位的项的大小,实际上就是unsigned integer类型;

count        -将要被写入项的最大数目;

stream      -指向FILE类型的指针,该指针通过fopen函数获取。

注:C语言对文件的操作使用了缓冲文件系统。

1.3文件的关闭(fclose)

使用fclose函数关闭文件,表示对文件的写入操作已经完成,系统会把缓存中的内容写入磁盘中的文件中。

1.4 fflush函数

希望每次对文件操作之后不关闭它,但仍能将缓冲区中的数据写入磁盘文件中,可以使用另一个C函数:fflush,该函数的作用是将缓冲区的数据写入到磁盘中。

1.5 文件指针定位

当调用文件写入函数想文件中写入数据后,还可以再次写入其他数据。在第二次调用fwrite函数时,利用C语言中的fseek函数把文件指针从当前位置移动到指定的位置。

int  fseek(FILE * stream, long offset, int origin);

stream      -指向FILE结构体指针;

offset        -设定偏移量;

origin        -指定文件指针的起始位置。

取值

说明

SEEK_CUR

从文件指针当前位置处开始

SEEK_END

从文件的结尾处开始

SEEK_SET

从文件的开始处开始

1.6 文件的读取(fread)

size_t fread(constvoid * buffer, size_t size, size_t count, FILE * _File);

利用C语言提供的函数实现文件的读取操作:

运行程序,消息框中会显示一串乱码。应注意,在C语言中,字符串是以\0符号结束的,在显示字符串时,系统会寻找\0字符。在程序中定义的100个元素的数组:ch,数据是随机的,可能有许多数据都是不可读的,由于其中没有找到\0字符,结果我们在消息框中就会看到乱码。

   FILE * pFile = fopen("1.txt","w");
   char ch[100];
   fread(ch,1,100,pFile);
   fclose(pFile);
   MessageBox(ch);


解决方案:

方法一:

   FILE * pFile = fopen("1.txt","w");
   char buf[22] = "http://www.sunxin.org";
   buf[21]= '\0';
   fwrite(buf,1,22,pFile);
   fclose(pFile);

方法二:

   FILE * pFile = fopen("1.txt","r");
   char ch[100];
   memset(ch,0,100);
   fread(ch,1,100,pFile);
   fclose(pFile);
   MessageBox(ch);

方法三:

   FILE * pFile = fopen("1.txt","r");
   char *pBuf;
   fseek(pFile,0,SEEK_END);
   int len = ftell(pFile);
   pBuf= new char[len + 1];
   rewind(pFile);
   fread(pBuf,1,len,pFile);
   pBuf[len]= 0;
   fclose(pFile);
   MessageBox(pBuf);

你可能感兴趣的:(编程整理,Visual,C++,文件操作)