18-文件操作

文件操作

一、文件指针

C语言中,规定了文件的结构体FILE

FILE *fp;

 

二、文件的打开和关闭。

打开:fopen(文件名,打开的方式);

通常来说,打开文件失败原因有3个:

1、r来打开一个空文件。

2、指定的盘符或者路径不存在。

3、文件名包含一些奇怪的字符。 123/.txt

4、有些文件被其他程序占用。

r

只读(普通文件)

w

只写(普通文件)

a

追加(普通文件)

r+

读和写(普通文件)

w+

读和写(普通文件)

a+

读和追加(普通文件)

rb

只读(二进制文件)

wb

只写(二进制文件)

ab

追加(二进制文件)

rb+

读和写(二进制文件)

wb+

读和写(二进制文件)

ab+

读和追加(二进制文件)

 

关闭:fclose(fp);  不关闭文件容易产生数据的流失。

 

 1 //----------------------------------------------打开和关闭文件
 2 #include <stdio.h>
 3 
 4 int main()
 5 {
 6     FILE *fp;  //定义一个文件指针
 7 
 8     if ((fp = fopen("123.txt", "w")) == NULL)  //打开一个文件
 9     {
10         printf("文件打开失败!\n");
11         exit(0);    
12     }
13 
14     fclose(fp);
15     return 0;
16 }

 

三、文件的读写

1、fputc(ch,fp)   向文件中写入字符(写)

 1 //======================================写字符fputc(ch,fp);
 2 #include <stdio.h>
 3 
 4 int main()
 5 {
 6     FILE *fp;  //定义一个文件指针
 7     char ch;   //定义字符变量
 8 
 9     if ((fp = fopen("123.txt", "w")) == NULL)  //打开一个文件
10     {
11         printf("文件打开失败!\n");
12         exit(0);
13     }
14  
15     printf("请输入字符:");
16     ch = getchar();
17 
18     while (ch != '#')
19     {
20         fputc(ch, fp);
21         ch = getchar();
22     }
23 
24     fclose(fp);
25     return 0;
26 }

 

2、fgetc(fp)      从文件中获取字符(读)  这个函数在遇到文件结尾的时候,返回一个EOF

 1 //==================================读字符:fgetc(fp);
 2 #include <stdio.h>
 3 
 4 int main()
 5 {
 6     FILE *fp;
 7     char ch;
 8      
 9     if ((fp = fopen("123.txt", "a+"))==NULL)  //只写
10     {
11         printf("文件打开失败!\n");
12         exit(0);
13     }
14 
15     while ((ch = fgetc(fp)) != EOF)  //文件的结尾  EOF
16     {
17         putchar(ch);
18     }
19 
20     fclose(fp);
21     return 0;
22 }

 

(2)  fputs(strfp);   写入字符串

 1 //=写字符串:fputs(str,fp);
 2 #include <stdio.h>
 3 
 4 int main()
 5 {
 6     FILE *fp;
 7     char filename[100], str[100];
 8 
 9     printf("请输入文件名称\n");
10     scanf("%s", filename);
11 
12     if ((fp = fopen(filename, "a+")) == NULL)
13     {
14         printf("打开文件失败!");
15         exit();
16     }
17 
18     printf("输入字符串:");
19 
20     getchar();
21     gets(str); //从键盘输入
22 
23     fputs(str, fp);
24     fclose(fp);
25     return 0;
26 }

 

  

fgets(str,字节数,fp);    读出字符串 包括’\0’

 1 //读字符串:fgets(str,字节数,fp);
 2 #include <stdio.h>
 3 
 4 int main()
 5 {
 6     FILE *fp;
 7     char filename[100], str[100];
 8 
 9     printf("请输入文件名称\n");
10     scanf("%s", filename);  //123.txt
11 
12     if ((fp = fopen(filename, "a+")) == NULL)
13     {
14         printf("打开文件失败!");
15         exit();
16     }
17 
18     fgets(str,6,fp);
19 
20     puts(str);
21 
22     fclose(fp);
23     return 0;
24 }

 

//=======fprintf(fp,"%s",str)

 1 #include <stdio.h>
 2 
 3 int main()
 4 {
 5     FILE *fp;
 6     char filename[100], str[100] = "Meung Python";
 7 
 8     printf("请输入文件名称\n");
 9     scanf("%s", filename);  //123.txt
10 
11     if ((fp = fopen(filename, "a+")) == NULL)
12     {
13         printf("打开文件失败!");
14         exit();
15     }
16 
17     fprintf(fp, "%s", str);
18 
19     fclose(fp);
20     return 0;
21 }

 

 

fprintf(fp,"%s",str)

fscanf(fp,"%d",&i)这两种读写  一定要注意空格  逗号。

 

 1 //fscanf(fp,"%d",&i)
 2 #include <stdio.h>
 3 
 4 int main()
 5 {
 6     FILE *fp;
 7     char filename[100], str[100],str1[100],str2[100];
 8 
 9     printf("请输入文件名称\n");
10     scanf("%s", filename);  //123.txt
11 
12     if ((fp = fopen(filename, "a+")) == NULL)
13     {
14         printf("打开文件失败!");
15         exit();
16     }
17 
18     fscanf(fp, "%s %s %s", str, str1, str2);
19 
20     printf("%s,%s,%s", str, str1, str2);
21 
22     fclose(fp);
23     return 0;
24 }

 

fread(str, 17, 2, fp);fp指向的文件中读取字符,每次读取17个字符,一共读取2次。字符串需要补’\0’

 1 #include <stdio.h>
 2 
 3 int main()
 4 {
 5     FILE *fp;
 6     char filename[100], str[100] = {0};
 7 
 8     printf("请输入文件名称\n");
 9     scanf("%s", filename);  //123.txt
10 
11     if ((fp = fopen(filename, "a+")) == NULL)
12     {
13         printf("打开文件失败!");
14         exit(0);
15     }
16 
17 
18     fread(str, 5, 3, fp);  //17不包括字符串
19     printf("%s", str);
20 
21     return 0;
22 }

 

Fwritebuffersize,count,fp)从字符串往文件写 size大小,写count次。

 1 #include <stdio.h>
 2 
 3 int main()
 4 {
 5     FILE *fp;
 6     char filename[100], str[100] =" Is everyone here taday";
 7 
 8     printf("请输入文件名称\n");
 9     scanf("%s", filename);  //123.txt
10 
11     if ((fp = fopen(filename, "a+")) == NULL)
12     {
13         printf("打开文件失败!");
14         exit(0);
15     }
16 
17 
18     fwrite(str, 3, 6, fp);  //17不包括字符串
19     //printf("%s", str);
20 
21     return 0;
22 }

 

Fseek(fp,偏移量,起始点)  //偏移量是常量 最好是加一个L

起始点:  文件头(0)  当前位置(1)  文件尾(2

偏移量:比如:起始点是0,偏移量为23L,从文件头开始往后边移动文件内部指针20个字节。

   起始点是2,偏移量为-20L,从文件尾开始往前边移动文件内部指针20个字节。

 

 1 //====fseek(fp,偏移量,起始点)
 2 #include <stdio.h>
 3 
 4 int main()
 5 {
 6     FILE *fp;
 7     char filename[100], str[100] = {0};
 8 
 9     printf("请输入文件名称\n");
10     scanf("%s", filename);  //123.txt
11 
12     if ((fp = fopen(filename, "a+")) == NULL)
13     {
14         printf("打开文件失败!");
15         exit(0);
16     }
17 
18     fseek(fp, 16L, 0);
19     fread(str, 5, 1, fp);
20     printf("%s", str);
21 
22     fseek(fp, -5L, 1);
23     fread(str, 5, 1, fp);
24     printf("%s", str);
25 
26      
27 
28     fseek(fp, 8L, 1);
29     fread(str, 2, 1, fp);
30     printf("%s", str);  
31 
32     //printf("%s", str);
33     return 0;
34 }

 

rewind(fp);把文件指针重新指向文件头

 1 //==ftell(fp)  返回一个与文件头的偏移量
 2 //计算我们输入的字符长度
 3 #include <stdio.h>
 4 
 5 int main()
 6 {
 7     FILE *fp;
 8     int num;
 9 
10     char filename[100], ch;
11 
12     printf("请输入文件名称\n");
13     scanf("%s", filename);  //123.txt
14 
15     if ((fp = fopen(filename, "a+")) == NULL)
16     {
17         printf("打开文件失败!");
18         exit(0);
19     }
20 
21 
22     ch = fgetc(fp);
23     while (ch!=EOF)
24     {
25         putchar(ch);
26         ch = fgetc(fp);
27     }
28 
29     num = ftell(fp);
30     printf("%d", num);  //63
31 
32     return 0;
33 }

 

 

 1 #include <stdio.h>
 2 
 3 int main()
 4 {
 5     FILE *fp;
 6     int num;
 7 
 8     char filename[100], str[100] = {0};
 9 
10     printf("请输入文件名称\n");
11     scanf("%s", filename);  //123.txt
12 
13     if ((fp = fopen(filename, "a+")) == NULL)
14     {
15         printf("打开文件失败!");
16         exit(0);
17     }
18 
19     fseek(fp, 16L, 0);   //16
20     fread(str, 5, 1, fp); //5
21     printf("%s", str);
22 
23     num = ftell(fp);
24     printf("\n%d\n", num);
25 
26      
27     fseek(fp, -5L, 1);
28     fread(str, 5, 1, fp);
29     printf("%s", str);
30 
31     num = ftell(fp);
32     printf("\n%d\n", num);
33 
34     rewind(fp); //文件内部指针重新指向文件头
35 
36     fseek(fp, 8L, 1);
37     fread(str, 6, 1, fp);
38     printf("%s", str); //lrldgo
39 
40     num = ftell(fp);
41     printf("\n%d\n", num); //14
42 
43     //printf("%s", str);
44     return 0;
45 }

 

总结:

fopen(filename,打开的方式)

fclose(fp)

fputc(ch,fp)

fgetc(fp)

fputs(str,fp)

fgets(buf,size,fp)   //size包含'\0'

fprintf(fp,"%s%d%f%c",a,b,c,d)

fscanf(fp,"%s %d %f %c",a,&b,&c,&d)  //注意格式 空格,逗号

fread(buf,size,count,fp)  //需要补上 '\0'

fwrite(buf,size,count,fp)

fseek(fp,偏移量,起始点)  起始点包括 0 1 2  偏移量为常量时加L

ftell(fp)   计算文件内部指针相对于文件头的偏移量。这个偏移量也是这个函数的返回值。

 

1、尝试去操作二进制文件。

2、希望做一个通过文件操作,结合前面的知识来写一个界面优美,功能齐全的什么什么系统。

 

转载于:https://www.cnblogs.com/tiantiancode/p/11131870.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值