StdC--13 C基本文件操作

Hightlight

1. 文件操作通用基本格式 

2. 文件操作读写操作

  2.1 文件写操作

  2.2 简单的文件读操作

  2.3 e.g.

  2.4 对文件批量处理练习---- fread/fwrite函数

3. 函数变长参数

4. 字符串转成int/float变量  ---atoi/atof 函数

5. sprintf和sscanf函数



1. 文件操作通用基本格式 

  -- 文件指针用来在程序中代表一个文件,类型是FILE*

  -- fopen函数可以打开一个文件并且把文件对应的结构体地址作为返回值

  --fclose函数可以关闭一个文件,他需要一个文件指针作为参数。文件关闭后文件指针应该被清除为NULL

  1 #include <stdio.h>
  2
  3 int main()
  4 {
  5     FILE *p_file=NULL;
  6     p_file=fopen("a.txt","w");
  7     if(p_file){
  8         fclose(p_file);
  9         p_file=NULL;
 10     }
 11     return 0;
 12 }

2. 文件操作读写操作

  2.1 文件写操作

  fputc函数可以把一个字符写进文件中 如果失败返回EOF

  1 #include <stdio.h>
  2 #include <stdlib.h>
  3
  4 int main()
  5 {
  6     FILE * p_file=NULL;
  7     p_file=fopen("a.txt","w");
  8
  9     char str[]="hello world";
 10     int i=0;
 11
 12
 13     if(p_file)
 14     {
 15         while(*(str+i)!=0){
 16             if(EOF== fputc(str[i],p_file)){//fputc可以吧一个字符写进文件中如果失败返回EOF
 17                 break;
 18             }
 19             i++;
 20         }
 21         fclose(p_file);
 22         p_file=NULL;
 23     }
 24     return 0;
 25 }
~          

  2.2 简单的文件读操作

  fgutc函数可以把一个从文件里读取一个字符 如果失败返回EOF

  1 #include <stdio.h>
  2 #include <stdlib.h>
  3
  4 int main()
  5 {
  6     FILE *p_file=NULL;
  7     p_file=fopen("a.txt","r");
  8     char zi_fu=0;
  9     if(p_file){
 10         while(zi_fu!=EOF)
 11         {
 12             zi_fu=fgetc(p_file);  //fgetc函数用于从文件中读操作
 13             if(zi_fu!=EOF)
 14                 printf("%c",zi_fu);
 15         }
 16         printf("\n");
 17         fclose(p_file);
 18         p_file=NULL;
 19     }
 20
 21 }

  2.3 e.g

1 #include <stdio.h>
  2 #include <stdlib.h>
  3
  4
  5 int main()
  6 {
  7     FILE *p_file_r=NULL;
  8     FILE *p_file_w=NULL;
  9
 10     p_file_r=fopen("a.txt","r");
 11     char chr=‘0‘;
 12     p_file_w=fopen("b.txt","w");
 13
 14     if(p_file_r!=0&&p_file_w!=0){
 15         while(chr!=EOF){
 16             chr=fgetc(p_file_r);
 17             if(chr!=EOF){
 18                 if(p_file_w){
 19                     if(EOF==fputc(chr,p_file_w))
 20                         break;
 21                 }
 22             }
 23         }
 24     }
 25     fclose(p_file_r);
 26     fclose(p_file_w);
 27     p_file_r=NULL;
 28     p_file_w=NULL;
 29
 30     return 0;
 31 }
~      

  2.4 对文件批量处理练习---- fread/fwrite函数

  ----fread函数,返回成功写进的数字个数, fwrite函数,返回成功写进的数字个数。

  ----fwrite函数可以批量以2进制方式向文件中写入数据。

  1 #include <stdio.h>
  2 #include <stdlib.h>
  3
  4 int main()
  5 {
  6     FILE *p_file=NULL;
  7     int values[3]={0};
  8
  9     p_file=fopen("a.bin","rb");
 10     if(p_file){
 11         int num=fread(values, sizeof(int),3,p_file);  //
 12
 13         //int num=fwrite(values,sizeof(int),3,p_file);
 14         printf("%d words has been writen\n",num);
 15         int i=0;
 16         for(i=0;i<3;i++)
 17         {
 18             printf("%d\n",values[i]);
 19         }
 20         fclose(p_file);
 21         p_file=NULL;
 22     }
 23 }

  2.4 对文件批量处理练习---- rewind/fseek函数

  ----文件的位置指针用来记录下一次文件操作的位置。

  ----rewind函数可以吧文件的位置指针移动到文件开头

  ----fseek函数可以把文件指针移动到文件中的任何位置上

  ----ftell函数,可以告诉我们当前文件位置指针的信息。

    -->SEEK_SET 表示文件开头,对应数字是0

    -->SEEK_CUR 表示文件当前位置,对应数字是1

    -->SEEK_END 表示文件结尾,对应数字是2

   在fseek函数中可以用上面3个位置作为基准位置来描述文件中的任何一个位置并把它设置成文件位置指针的位置

  1 #include <stdio.h>
  2 #include <stdlib.h>
  3
  4 int main()
  5 {
  6     FILE *p_file=NULL;
  7     char zi_fu=0;
  8     p_file=fopen("a.txt","r");
  9
 10     if(p_file){
 11         fseek(p_file,6,SEEK_SET);    //读到w.把位置指针移动到从文件头开始向后6个字节的位置
 12         zi_fu=fgetc(p_file);
 13         printf("%c",zi_fu);
 14
 15         fseek(p_file,-1,SEEK_END);    //读到d. 把位置指针移动到从文件尾开始向前2个字节位置
 16         zi_fu=fgetc(p_file);
 17         printf("%c",zi_fu);
 18
 19         fseek(p_file,-3,SEEK_CUR);    //读到r.
                     //把位置指针移动到从文件位置指针当前位置向前3个字节的位置
 20         zi_fu=fgetc(p_file);
 21         printf("%c\n",zi_fu);
 22
 23         printf("the current file pointer is staying at: %ld\n",ftell(p_file));
 24         fclose(p_file);
 25         p_file=NULL;
 26     }
 27
 28     return 0;
 29 }

  2.4 以文本形式对文件批量处理练习--fputs函数和fgets函数

    ---- fputs函数可以把一个字符串整体写入到一个文件中区,fgets函数可以从一个文件中读取一个字符串到内存的变量中。

  1 #include <stdio.h>
  2 #include <stdlib.h>
  3
  4 int main()
  5 {
  6     FILE *p_file=NULL;
  7     p_file=fopen("c.txt","w");
  8     if(p_file)
  9     {
 10         fputs("xyz abc ",p_file);   //return EOF if fputs function failed.
 11
 12         fclose(p_file);
 13         p_file=NULL;
 14     }
 15     return 0;
 16 

  2.5 以文本形式对文件批量处理练习--fprintf函数和fscanf函数

  --fprintf函数可以按照指定的格式吧数据写到文件中

  --fscanf函数可以按照指定的格式从文件中把数据读出来并记录到变量中

  1 #include <stdlib.h>
  2 #include <stdio.h>
  3 int main()
  4 {
  5     FILE *p_file=NULL;
  6     int value=0;
  7     char chr=0;
  8     float flo=0.0f;
  9     p_file=fopen("d.txt","r");
 10     if(p_file)
 11     {
 12         fscanf(p_file,"%d %c %g", &value, &chr,&flo);
 13         printf("%d\n%c\n%g\n",value,chr,flo);
 14         fclose(p_file);
 15         p_file=NULL;
 16     }
 17     return 0;
 18 }
  1 #include <stdio.h>
  2
  3 int main()
  4 {
  5     FILE *p_file=NULL;
  6     p_file=fopen("d.txt","w");
  7     if(p_file)
  8     {
  9         fprintf(p_file, "%d %c %g\n",15,‘y‘,1.8f);
 10
 11         fclose(p_file);
 12         p_file=NULL;
 13     }
 14     return 0;
 15 }

3. 函数变长参数

在C中,当我们无法列出传递函数的所有实参的类型和数目时,可以用省略号指定参数表

下面是 <stdarg.h> 里面重要的几个宏定义如下:
typedef char* va_list;
void va_start ( va_list ap, prev_param ); /* ANSI version */
type va_arg ( va_list ap, type ); 
void va_end ( va_list ap );

<Step 1> 在调用参数表之前,定义一个 va_list 类型的变量,(假设va_list 类型变量被定义为ap);
<Step 2> 然后应该对ap 进行初始化,让它指向可变参数表里面的第一个参数,这是通过 va_start 来实现的,第一个参数是 ap 本身,第二个参数是在变参表前面紧挨着的一个变量,即“...”之前的那个参数;
<Step 3> 然后是获取参数,调用va_arg,它的第一个参数是ap,第二个参数是要获取的参数的指定类型,然后返回这个指定类型的值,并且把 ap 的位置指向变参表的下一个变量位置;
<Step 4> 获取所有的参数之后,我们有必要将这个 ap 指针关掉,以免发生危险,方法是调用 va_end,他是输入的参数 ap 置为 NULL,应该养成获取完参数表之后关闭指针的习惯。说白了,就是让我们的程序具有健壮性。通常va_start和va_end是成对出现。

  1 #include <stdlib.h>
  2 #include <stdarg.h>
  3
  4 void func(int cnt, ...){
  5     va_list v;  //find all uncentain variable
  6     va_start(v,cnt);
  7     int i=0;
  8     for(i=0;i<cnt;i++){
  9         printf("%d ", va_arg(v,int));
 10     }
 11     printf("\n");
 12     va_end(v);
 13 }
 14
 15 int find_max(int cnt, ...){
 16     int res=1<<31;
 17     va_list v;
 18     va_start(v,cnt);
 19     int i=0;
 20     for(i=0;i<cnt;i++){
 21         int tmp =0;
 22         tmp =va_arg(v,int);
 23         if(tmp>res){
 24             res=tmp;
 25             }
 26         }
 27     va_end(v);
 28     return res;
 29 }
 30
 31 int main()
 32 {
 33     func(3,9,16,-6,17);
 34     func(5,1,2,3,4,5);
 35     printf("findMax %d\n",find_max(5,5,6,7,8,9));
 36     return 0;
 37 }

4. 字符串转成int/float变量  ---atoi/atof 函数

 1 #include <stdio.h>
  2 #include <stdlib.h>
  3 int main()
  4 {
  5     int value =0;
  6     float a_float=0.0f;
  7     value=atoi("297");
  8     printf("%d\n",value);
  9     a_float=atof("4.7");
 10     printf("%g\n",a_float);
 11     return 0;
 12     }

5. sprintf和sscanf函数

sprintf() - 主要功能是把格式化的数据写入某个字符串中

sscanf() - 从一个字符串中读进与指定格式相符的数据

  1 #include <stdio.h>
  2
  3 int main()
  4 {
  5     char a_char=‘t‘;
  6     int value =27;
  7     float a_float=3.8f;
  8     char str[20];
  9     sprintf(str,"%c %d %g\n",a_char,value,a_float);
 10
 11     printf("%s",str);
 12     a_char=0;
 13     value=0;
 14     a_float=0.0f;
 15
 16     printf("%c %d %g\n",a_char,value,a_float);
 17     sscanf(str,"%c %d %g",&a_char,&value,&a_float);
 18
 19     printf("%c %d %g\n",a_char,value,a_float);
 20
 21     return 0;
 22 }
时间: 2024-10-07 08:24:48

StdC--13 C基本文件操作的相关文章

python基础:python循环、三元运算、字典、文件操作

目录: python循环 三元运算 字符串 字典 文件操作基础 一.python编程 在面向过程式编程语言的执行流程中包含: 顺序执行 选择执行 循环执行 if是条件判断语句:if的执行流程属于选择执行:if语句有三种格式,如下: 在多分支的if表达式中,即使多个条件同时为真,也只会执行一个,首先测试为真: 选择执行 单分支的if语句 if CONDITION: 条件为真分支 双分支的if语句 if CONDITION 条件为真分支 else 条件不满足时分支 多分支的if语句 if CONDI

Python基础(六) 基础文件操作

今天学习python下对文件的基础操作,主要从open函数.File对象的属性.文件定位.简单操作.举例说明几个步骤开始学习,下面开始进入今天的主题: 一.open函数介绍 open函数主要是打开一个文件,创建一个file对象,相关的方法可以调用它进行读写 . 语法格式如下: 1 2 3 file object = open(文件名,打开文件的模式) file object  = with open (文件名,打开文件的模式) as 变量名 两种语法格式的不同在于下面这种方法不用输入f.clos

C/C++文件操作

1 基于C的文件操作 在ANSI C中,对文件的操作分为两种方式,即流式文件操作和I/O文件操作 2 一.流式文件操作 3 4 1.fopen() 5 FILE *fopen(const char *filename,const char *mode) 6 "r" 以只读方式打开文件 7 "w" 以只写方式打开文件 8 "a" 以追加方式打开文件 9 "r+" 以读/写方式打开文件,如无文件出错 10 "w+&quo

python第三节函数,文件操作

文件操作#以读的方式打开文件# f=open('c.txt',encoding='utf-8')# print(f)# data = f.read() #以读的方式打开# print(data)# print(f.closed) #判断文件是否是关闭状态# print(f.encoding)#输出文件编码# print(f.name)   #输出文件名称# print(f.readable())#判断文件是否是读模式# print(f.readline(),end='')#一次只读一行,end去

day3 文件操作

文件操作是在内存中进行操作的,因为文件是存储在内存中的. open函数,该函数用于文件处理: 操作文件时,一般需要经历如下步骤: (1)打开文件: (2)操作文件 一.打开文件 文件句柄 = open("文件路径","模式") 打开文件时,需要指定文件路径和以何等方式打开文件,打开后,即可获取该文件句柄,日后通过此文件句柄对该文件操作. 打开文件的模式有: (1)r,只读模式(默认): (2)w,只写模式.[不可读:不存在则创建:存在则删除内容:] (3)a,追加模

PHP文件操作系统----主要的文件操作函数

一.文件操作系统概述 1.概述: php中的文件操作系统主要是对文件和目录的操作.文件在windows系统下分为3种不同:文件.目录.未知,在linux/unix系统下分为7种不同:block.char.dir.fifo.file.link和unknown七种类型.目录在windows系统:D:/a/b/c.php 或 D:\a\b\c.php,在linux/unix系统: /a/b/c.php,为统一建议使用"/"作为目录之间的分割符. 2.目录或文件属性获取函数 *(1)取得文件类

python成长之路第三篇(4)_作用域,递归,模块,内置模块(os,ConfigParser,hashlib),with文件操作

打个广告欢迎加入linux,python资源分享群群号:478616847 目录: 1.作用域 2.递归 3.模块介绍 4.内置模块-OS 5.内置模块-ConfigParser 6.内置模块-hashlib 7.with文件操作 代码执行环境默认为3.5.1 一.作用域 (1)什么是作用域,官方来说作用域就是就是有不同的命名空间,就像下面的代码一样,a=1它的作用域是全局的,也在全局的命名空间当中,当函数 action中的a=2它就在局部的作用域中,也在局部的命名空间当中. a = 1def

C语言4——文件操作

1.文件操作 int main(){ FILE *p=fopen("D:\\temp\\a.txt","w");//用写的方式打开一个文件 //w的意思是如果文件不存在就建立一个,如果文件存在就覆盖 fputs("hello world",p);//向文件中写入一个字符串 fclose(p);//关闭文件 } int main(void){ char s[1024]={0}; FILE *p=fopen("D:\\temp\\a.txt

Java文件操作系列[2]——使用JXL操作Excel文件

由于java流无法实现对Excel文件的读写操作,因此在项目中经常利用第三方开源的组件来实现.支持Excel文件操作的第三方开源组件主要有Apache的POI和开源社区的JXL. 总体来说,二者的区别是:JXL较为轻量级,如果是对Excel文件的简单操作,建议使用JXL:POI的功能相当强大,但同时处理问题也相当的繁琐. 1.准备工作 [必需]下载JXL的jar包:jxl.jar [非必需]JXL API  (提取密码:zgqj) 2.一些必要的说明 主要是对Excel结构的说明: Excel后

Python 第三天 文件操作

文件操作 操作文件时,一般需要经历如下步骤: 打开文件 操作文件 一.打开 文件句柄 = file('文件路径', '模式') 注:python中打开文件有两种方式,即:open(...) 和  file(...) ,本质上前者在内部会调用后者来进行文件操作,推荐使用 open. open会自己在Python中找. 打开文件时,需要指定文件路径和以何等方式打开文件,打开后,即可获取该文件句柄,日后通过此文件句柄对该文件操作. 打开文件的模式有: r,只读模式(默认). w,只写模式.[不可读,也