VC 读写txt文件――FILE *

VC 读写txt文件――FILE *
2011年04月25日
  源地址:http://hi.baidu.com/greatren518/blog/item/56330af0c110abc67931aacc.html
  C语言中没有输入输出语句,所有的输入输出功能都用ANSI C提供的一组标准库函数来实现。文件操作标准库函数有:
        文件的打开操作 fopen 打开一个文件
        文件的关闭操作 fclose 关闭一个文件
        文件的读写操作 fgetc 从文件中读取一个字符
                fputc 写一个字符到文件中去
                fgets 从文件中读取一个字符串
                fputs 写一个字符串到文件中去
                fprintf 往文件中写格式化数据
                fscanf 格式化读取文件中数据
                fread 以二进制形式读取文件中的数据
                fwrite 以二进制形式写数据到文件中去
                getw 以二进制形式读取一个整数
                putw 以二进制形式存贮一个整数
      文件状态检查函数 feof 文件结束
                ferror 文件读/写出错
                clearerr 清除文件错误标志
                ftell 了解文件指针的当前位置
        文件定位函数 rewind 反绕
                fseek 随机定位
  [b]文件的打开[/b]
   1.函数原型
  [b]    FILE *fopen(char *pname,char *mode)
  [/b]
   2.功能说明
     按照mode 规定的方式,打开由pname指定的文件。若找不到由pname指定的相应文件,就按以下方式之一处理:
  (1) 此时如mode 规定按写方式打开文件,就按由pname指定的名字建立一个新文件;
  (2) 此时如mode 规定按读方式打开文件,就会产生一个错误。
  打开文件的作用是:
  (1)分配给打开文件一个FILE 类型的文件结构体变量,并将有关信息填入文件结构体变量;
  (2)开辟一个缓冲区;
  (3)调用操作系统提供的打开文件或建立新文件功能,打开或建立指定文件;
  FILE *:指出fopen是一个返回文件类型的指针函数;
   3.参数说明
  pname:是一个字符指针,它将指向要打开或建立的文件的文件名字符串。
  mode:是一个指向文件处理方式字符串的字符指针。所有可能的文件处理方式见表8.1
   4.返回值
     正常返回:被打开文件的文件指针。
     异常返回:NULL,表示打开操作不成功。
  例如:
  FILE *fp;
  if((fp=fopen("test","r"))==NULL){
  printf("The file can not be opened.\n");
   
  exit(1);
  }
   要说明的是:C语言将计算机的输入输出设备都看作是文件。例如,键盘文件、屏幕文件等。ANSI C标准规定,在执行程序时系统先自动打开键盘、屏幕、错误三个文件。这三个文件的文件指针分别是:标准输入stdin、标准输出stdout和标准出错stderr。
  [b]文件的关闭[/b]
  1. 函数原型
  [b]    int fclose(FILE *fp);
  [/b]
  2. 功能说明
    关闭由fp指出的文件。此时调用操作系统提供的文件关闭功能,关闭由fp->fd指出的文件;释放由fp指出的文件类型结构体变量;返回操作结果,即0或EOF。
  3. 参数说明
    fp:一个已打开文件的文件指针。
  4. 返回值
    正常返回:0。
    异常返回:EOF,表示文件在关闭时发生错误。
  例如:
  int n;
  n=fclose(fp);
  [b]文件的读写操作[/b]
  [b]A. 从文件中读取一个字符
  [/b]  1. 函数原型
  [b]      int fgetc(FILE *fp);
  [/b]  2. 功能说明
      从fp所指文件中读取一个字符。
    3. 参数说明
      fp:这是个文件指针,它指出要从中读取字符的文件。
    4. 返回值
    正常返回: 返回读取字符的代码。
    非正常返回:返回EOF。例如,要从"写打开"文件中读取一个字符时,会发生错误而返回一个EOF。
    5. 实例
  【例8.1】显示指定文件的内容。
  程序名为:display.c
  执行时可用:display filename1 形式的命令行运行。显示文件filename1中的内容。例如,执行命令行display display.c将在屏幕上显示display的原代码。
  #include
  main(int argc,char *argv[])
  { int ch;
   
  FILE *fp;
   if(argc!=2)
   { printf("Error format,Usage: display filename1\n");
    exit(1);
   }
   if((fp=fopen(argv[1],"r"))==NULL){
    printf("The file can not be opened.\n",argv[1]);
     
  exit(1);
   }
   
   ch=fgetc(fp);
   while(ch!=EOF)
   { putchar(ch);
    ch=fgetc(fp);
   }
   fclose(fp);
  }
  [b]B. 写一个字符到文件中去
  [/b]
  1. 函数原型
  [b]  int fputc(int ch,FILE *fp)
  [/b]2. 功能说明
    把ch中的字符写入由fp指出的文件中去。
  3. 参数说明
    ch:是一个整型变量,内存要写到文件中的字符(C语言中整型量和字符量可以通用)。
    fp:这是个文件指针,指出要在其中写入字符的文件。
  4. 返回值
    正常返回: 要写入字符的代码。
    非正常返回:返回EOF。例如,要往"读打开"文件中写一个字符时,会发生错误而返回一个EOF。
  5. 实例
  【例8.2】将一个文件的内容复制到另一个文件中去。
  程序名为:copyfile.c
  执行时可用:copyfile filename1 filename2形式的命令行运行,将文件filename1中的内容复制到文件filename2中去。
  #include
  main(int argc,char *argv[])
  { int ch;
   FILE *in,*out;
   if(argc!=3)
   { printf("Error in format,Usage: copyfile filename1     
    filename2\n");
    exit(1);
   }
   if((in=fopen(argv[1],"r"))==NULL)
   { printf("The file can not be opened.\n",argv[1]);
    exit(1);
   }
   
   if((out=fopen(argv[2],"w"))==NULL)
   { printf("The file %s can not be opened.\n",argv[2]);
   exit(1);
   }
   
   ch=fgetc(in);
   while(ch!=EOF)
   { fputc(ch,out);
    ch=fgetc(in);
   }
   fclose(in);
   fclose(out);
  }
  【例8.3】按十进制和字符显示文件代码,若遇不可示字符就用井号"#"字符代替之。
  程序名为:dumpf.c
  执行时可用:dumpf filename1 形式的命令行运行。
  #include
  main(int argc,char *argv[])
  { char str[9];
   int ch,count,i;
   FILE *fp;
   if(argc!=2)
   { printf("Error format,Usage: dumpf filename\n");
    exit(1);
   }
   if((fp=fopen(argv[1],"r"))==NULL)
   { printf("The file %s can not be opened.\n",argv[1]);
    exit(0);
   }
   count=0;
   do{ i=0;
     printf("o: ",count*8);
    do{
  ch=fgetc(fp);
      printf("M",ch);
      if(ch'~') str='#';
      else str=ch;
      if(++i==8) break;
    }while(ch!=EOF);
    str='\0';
    for(;i函数原型
  [b]  char *fgets(char *str,int n,FILE *fp)
  [/b]2.功能说明
    从由fp指出的文件中读取n-1个字符,并把它们存放到由str指出的字符数组中去,最后加上一个字符串结束符'\0'。
  3. 参数说明
    str:接收字符串的内存地址,可以是数组名,也可以是指针。
    n: 指出要读取字符的个数。
    fp:这是个文件指针,指出要从中读取字符的文件。
  4. 返回值
  正常返回:返回字符串的内存首地址,即str的值。
  非正常返回:返回一个NULL值,此时应当用feof()或ferror()函数来判别是读取到了文件尾,还是发生了错误。例如,要从"写打开"文件中读取字符串,将
  发生错误而返回一个NULL值。
  [b]D. 写一个字符串到文件中去
  [/b]
  1. 函数原型
  [b]  int fputs(char *str,FILE *fp)
  [/b]2. 功能说明
    把由str指出的字符串写入到fp所指的文件中去。
  3. 参数说明
    str:指出要写到文件中去的字符串。
    fp:这是个文件指针,指出字符串要写入其中的文件。
  4. 返回值
    正常返回: 写入文件的字符个数,即字符串的长度。
    非正常返回:返回一个NULL值,此时应当用feof()或ferror()函数来判别是读取到了文件尾,还是发生了错误。例如,要往一个"读打开"文件中写字符串时,
  会发生错误而返回一个NULL值。
  5.实例
  【例8.4】以下程序将一个文件的内容附加到另一个文件中去。
  设下面这个程序名为:linkfile.c
  执行时可用:linkfile filename1 filename2形式的命令行运行,将文件filename2的内容附加在文件filename1之后。
  #include
  #define SIZE 512
  main(int argc,char *argv[])
  { char buffer[SIZE];
   FILE *fp1,*fp2;
   if(argc!=3)
   { printf("Usage: linkfile filename1 filename2\n");
    exit(1);
   }
   if((fp1=fopen(argv[1],"a"))==NULL)
   { printf("The file %s can not be opened.\n",argv[1]);
    exit(1);
   }
  if((fp2=fopen(argv[2],"r"))==NULL)
  { printf("The file %s can not be opened.\n",argv[2]);
    exit(1);
  }
  while(fgets(buffer,SIZE,fp1)!=NULL)
    printf("%s\n",buffer);
  while(fgets(buffer,SIZE,fp2)!=NULL)
    fputs(buffer,fp1);
  fclose(fp1);
  fclose(fp2);
  if((fp1=fopen(argv[1],"r"))==NULL)
  { printf("The file %s can not be opened.\n",argv[1]);
    exit(1);
  }
  while(fgets(buffer,SIZE,fp1)!=NULL)
    printf("%s\n",buffer);
  fclose(fp1);
  }
  [b]E. 往文件中写格式化数据
  [/b]
  1.函数原型
  [b]  int fprintf(FILE *fp,char *format,arg_list)
  [/b]2.功能说明
    将变量表列(arg_list)中的数据,按照format指出的格式,写入由fp指定的文件。fprintf()函数与printf()函数的功能相同,只是printf()函数是将数据写入屏幕文件(stdout)。
  3.参数说明
    fp:这是个文件指针,指出要将数据写入的文件。
    format:这是个指向字符串的字符指针,字符串中含有要写出数据的格式,所以该字符串成为格式串。格式串描述的规则与printf()函数中的格式串相同。
  arg_list:是要写入文件的变量表列,各变量之间用逗号分隔。
  4.返回值
    无。
  5. 实例
  【8.5】下列程序的执行文件为display.exe,执行时键入命令行:
     display [-i][-s] filename
  下面的表格列出了命令行参数的含义及其功能:
  读写txt文件
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值