C语言的文件系统

来源:互联网 发布:raphael min.js 下载 编辑:程序博客网 时间:2024/05/22 00:55

      C文件系统由若干互相联系的函数构成,这类函数要求包含头文件<stdio.h>。常用的缓冲文件系统函数有:

      fopen():打开一个文件

      fclose():关闭一个文件

      putc(),fputc():向文件写一个字符

      getc(),fgetc():从文件中读取一个字符

      fgets():从文件中读一字串

      fputs():写字串到文件

      fseek():写文件中定位于特定字节

      ftell():返回当前文件位置

      fprintf():与文件的关系和pritnf()与控制台的关系相同

      fscan():与文件的关系和scanf()与控制台的关系相同

      feof():到达文件结尾时返回真值(true)

      ferror():发生错误时返回真值(true)

      rewind():把文件的定位指示置回文件开始处

      remove():删除一个文件

      flush():对一个文件清仓


      头文件<stdio.h>提供I/O函数的原型,同时定义size_t, fpos_t和FILE三个类型。类型size_t和fpos_t本质上与unsigned一样。

      <stdio.h>还定义了若干宏,如NULL,EOF,FOPEN_MAX,SEEK_SET,SEEK_CUR和SEEK_END。宏NULL定义为空指针。宏EOF一般定义为-1,作为输入函数读过文件尾时的返回值。FOPEN_MAX定义整型值,用以确定在任何时刻可以打开的文件数目。其他宏和fseek()一起作用,对文件实施随机访问。


      文件指针(file pointer):是贯穿缓冲I/O系统的主线。文件指针是指向定义文件操作信息的指针,信息中包含文件的名字,状态和当前读写位置。文件指针标识一个特定磁盘文件,被相连的流用来指导缓冲文件函数的操作。

      文件指针是FILE型指针变量。为了读写文件,程序需要使用文件指针,为了得到一个文件指针变量,应书写的语句结构如下所示:

FILE *fp;


      打开文件:fopen()打开一个流,将该流和一个文件关联,然后返回有关的文件指针。函数fopen()的原型是:

FILE *fopen(const char *filename,const char *mode);
      函数fopen()返回一个文件指针,空文件指针标识fopen()失败。程序中绝不应该更改fopen()返回的文件指针。mode指向的串决定文件的打开方式。其取值和意义如下:

方式意义r“读打开”文本文件w“写生成”文本文件a向文本文件追加rb“读打开”二进制文件wb“写生成”二进制文件ab向二进制文件追加r+“读写打开”文本文件w+“读写生成”文本文件a+向文本“读写”文件追加r+b“读写打开”二进制文件w+b“读写生成”二进制文件a+b向二进制“读写”文件追加
      下面的代码示例为输出而使用fopen()打开名为test的文件:

FILE *fp;if((fp=fopen("test","w"))==NULL){    printf("Cannot open file.\n");    exit(1);}

      关闭文件:函数fclose()关闭fopen()打开的流。fclose()把遗留在缓冲区的数据写入文件,实施操作系统级的关闭操作。fclose()的原型:

int fclose(FILE *fp);
      fp是fclose()返回的文件指针。返回零值表示关闭成功,其他值表示关闭错误。

      写字符:putc()和fputc()是输出字符的2个等价函数。存在两个相同函数的简单目的是保持与C语言早期版本的兼容性。本函数向预先用fopen()“写打开”的文件写一个字符,其原型是:

int putc(int ch, FILE *fp);
      fp是fopen()返回的FILE型指针。ch是被写入文件的字符。成功时返回写入的字符,否则返回EOF。


      读字符:同上,读字符也是2个等价的函数getc()和fgetc()。本函数从fopen()“读打开”的文件中读一个字符,其原型是:

int getc(FILE *fp);
      到达文件结尾时,getc()返回EOF。以下代码读文本文件,直到文本文件的结束:

do{    ch=getc(fp);    }while(ch!=EOF);

      但上述不是判定是否到达文件尾的最佳方法。C文件系统也可以操作二进制数据,读入二进制文件时,可能遇到等于EOF值的整数,而文件尚未结束。其次getc()失败或到达文件尾均返回EOF,所以最好使用另一个函数feof()来判断。到达文件尾时,feof()返回真值,否则返回零。以下代码读入二进制数据直到文件末尾:

while(!feof(fp))    ch=getc(fp);


      一个应用上述函数的综合例子:

//新建一个文本文件,从屏幕输入字符,将字符写入文件,输入“$”符号则关闭文件,终止程序#include <stdio.h>#include <stdlib.h>int main(int argc, char *argv[]){  FILE *fp;  char ch;  //从命令行输入命令时,必须要带一个文件名的参数  if(argc!=2) {    printf("You forgot to enter the filename.\n");    exit(1);  }  //判定文件打开是否成功  if((fp=fopen(argv[1], "w"))==NULL) {    printf("Cannot open file.\n");    exit(1);  }  //从屏幕持续获取输入字符,写入文件,直到输入$符号时结束循环  do {    ch = getchar();    putc(ch, fp);  } while (ch != '$');  //关闭文件  fclose(fp);  return 0;}

      以下代码则将上述代码写入的文件逐字符读出,并显示在屏幕上。

#include <stdio.h>#include <stdlib.h>int main(int argc, char *argv[]){  FILE *fp;  char ch;  if(argc!=2) {    printf("You forgot to enter the filename.\n");    exit(1);  }  if((fp=fopen(argv[1], "r"))==NULL) {    printf("Cannot open file.\n");    exit(1);  }  ch = getc(fp);   /* 读出一个字符 */  //文件尚未到达文件末尾,则持续读取  while (!feof(fp)) {    putchar(ch);  /* 将此字符输出到屏幕 */    ch = getc(fp);  }  fclose(fp);  return 0;}


原创粉丝点击