美文网首页
文件指针操作2

文件指针操作2

作者: wangxn | 来源:发表于2016-03-24 16:47 被阅读0次
    • 主要使用的函数
      功能比较强悍的主要就是fseek()函数了
      int fseek(FILE * pf, long offset, int WHENCE)
    • 主要使用的场景
      1. 移动到文件中的指定位置,替换该位置的数据
      2. 在文件中遍历搜索给定的元素, 并替换该位置的数据
    • 如下一个小demo,集合了需求的测试
      #include <stdio.h>
      #include <stdlib.h>
      #include <string.h>
      void fseek_test(FILE * pf); void printf_file(FILE * pf, int size); int search_and_replace(FILE * pf, int size,double beReplaced, double replace);
      int main(void){
      char * path = "E:/test.bin";
      FILE * pf;
      pf = fopen(path, "wb+");
      if(pf == NULL){
      perror("open file err");
      return -1;
      }
      fseek_test(pf);
      if(pf != NULL){
      fclose(pf);
      }
      getchar();
      return 0;
      }
      void fseek_test(FILE *pf){
      double src[10] = {0.1, 0.2, 0.3, 0.4, 0.5, 1.6, 1.7, 1.8,1.9, 2.0};
      int rct = fwrite(src, sizeof(double), 10, pf);
      if(rct != 10){
      perror("write data err");
      clearerr(pf);
      return;
      }
      printf("%s\n", "first the data in the file:"); printf_file(pf, 10); fseek(pf, 0 - 3 *sizeof(double), SEEK_END); double tmp = 18.1; fwrite(&tmp, sizeof(double), 1, pf); printf("%s\n", "change the eight double to 18.1:"); printf_file(pf, 10); if(search_and_replace(pf, 10, 0.5, 100.1) >= 0){
      printf("%s\n", "seach double 0.5 and replace it to 100.1,then show all number");
      printf_file(pf, 10);
      } }
      // param pf : 文件指针 // @param size : 元素总个数 // @param beReplaced : 在文件中需要搜索的并且需要被替换的元素 // @param replace : 需要被替换为的结果元素
      int search_and_replace(FILE * pf, int size, double beReplaced, double replace){
      rewind(pf);
      int i;
      int retVal = -1;
      double tmp = 0;
      for(i = 0; i<size; i++){
      int ret = fread(&tmp, sizeof(double), 1, pf);
      if(ret == 1 && tmp == beReplaced){
      fseek(pf, 0 - sizeof(double), SEEK_CUR);
      tmp = replace;
      fwrite(&tmp, sizeof(double), 1, pf);
      retVal = i;
      break;
      }
      }
      return retVal;
      }
      // @param pf : 文件指针 // @param size : 文件中元素的个数
      void printf_file(FILE * pf, int size){
      rewind(pf);
      double * src = ( double * ) malloc(sizeof(double) * size);
      memset(src, 0, sizeof(double) * size);
      int ret = fread(src, sizeof(double), size, pf);
      if(ret != size){
      perror("read file err");
      clearerr(pf);
      free(src);
      return;
      }
      int i;
      for(i = 0; i<size; i++){
      printf("%f\t",src[i]);
      if((i + 1)%2 == 0 && i != 0){
      printf("\n");
      }
      }
      free(src);
      rewind(pf);
      return;
      }

    相关文章

      网友评论

          本文标题:文件指针操作2

          本文链接:https://www.haomeiwen.com/subject/ijurlttx.html