zoukankan      html  css  js  c++  java
  • 全国计算机等级考试二级教程-C语言程序设计_第16章_文件

    写入一段文本到文件

     1 #define _CRT_SECURE_NO_WARNINGS
     2 
     3 #include<stdio.h>
     4 #include<stdlib.h>
     5 
     6 main()
     7 {
     8     FILE *pf;//文件指针
     9     char path[100] = "E:\1.txt";
    10     pf = fopen(path, "w");//打开一个写入的文件,有就覆盖,没有创建之
    11 
    12     if (pf == NULL)
    13     {
    14         printf("文件打开失败");
    15     }
    16     else
    17     {
    18         printf("文件打开成功
    ");
    19 
    20         char str[100] = "hello world, i love cpp";
    21         int length;
    22         length = strlen(str);//获取字符串的长度
    23         int i;
    24 
    25         for (i = 0;i < length;i++)
    26         {
    27             fputc(str[i], pf);//往一个文件写入字符
    28         }
    29 
    30         fclose(pf);
    31     }
    32 
    33     system("pause");
    34 }

    字符读取,字符串读取

     1 #define _CRT_SECURE_NO_WARNINGS
     2 
     3 #include<stdio.h>
     4 #include<stdlib.h>
     5 
     6 main()
     7 {
     8     FILE *pf;
     9 
    10     pf = fopen("E:\1.txt", "r");
    11 
    12     if (pf == NULL)
    13     {
    14         printf("fail");
    15     }
    16     else
    17     {
    18         int size;
    19         
    20         while (!feof(pf))//字符读取
    21         {
    22             char ch = fgetc(pf);
    23             putchar(ch);
    24         }
    25 
    26         size = ftell(pf);
    27 
    28         printf("size=%d
    ", size);
    29 
    30         printf("
    ");
    31         rewind(pf);
    32 
    33         char str[100] = { 0 };
    34         while (fgets(str, 100, pf) != NULL)//字符串读取
    35         {
    36             puts(str);
    37         }
    38 
    39         printf("size=%d
    ", size);
    40 
    41         fclose(pf);
    42     }
    43 
    44     system("pause"); 
    45 }

    字符移位加密

     1 #define _CRT_SECURE_NO_WARNINGS
     2 
     3 #include<stdio.h>
     4 #include<stdlib.h>
     5 
     6 void jia(int pass)
     7 {
     8     FILE *pfr;//读取1.txt
     9     FILE *pfw;//写入1jia.txt
    10 
    11     char pathr[100] = "E:\1.txt";
    12     char pathw[100] = "E:\1jia.txt";
    13 
    14     pfr = fopen(pathr, "r");//用读的模式打开被加密的文件
    15     pfw = fopen(pathw, "w");//用写的模式打开要写入加密的文件
    16 
    17     if (pfr == NULL || pfw == NULL)
    18     {
    19         printf("文件故障,加密失败");
    20         return;
    21     }
    22     
    23     while (!feof(pfr))//一直读到要加密的文本的末尾
    24     {
    25         char ch = fgetc(pfr);
    26         ch = ch + pass;//字符移位加密
    27         fputc(ch, pfw);//写入文本
    28     }
    29 
    30     fclose(pfr);
    31 }
    32 
    33 void jie(int pass)
    34 {
    35     FILE *pfr;//读取1jia.txt
    36     FILE *pfw;//写入1jie.txt
    37 
    38     char pathr[100] = "E:\1jia.txt";
    39     char pathw[100] = "E:\1jie.txt";
    40 
    41     pfr = fopen(pathr, "r");//用读的模式打开加密以后的文件
    42     pfw = fopen(pathw, "w");//用写的模式打开要写入解密的文件
    43 
    44     if (pfr == NULL || pfw == NULL)
    45     {
    46         printf("文件故障,加密失败");
    47         return;
    48     }
    49 
    50     while (!feof(pfr))//一直读到要解密的文本的末尾
    51     {
    52         char ch = fgetc(pfr);
    53         ch = ch - pass;//字符移位加密
    54         fputc(ch, pfw);//写入文本
    55     }
    56 
    57     fclose(pfr);
    58 }
    59 
    60 main()
    61 {
    62     int pass = 5;
    63 
    64     jia(pass);
    65 
    66     jie(pass);
    67 
    68     system("pause"); 
    69 }

    字符异或加密

     1 #define _CRT_SECURE_NO_WARNINGS
     2 
     3 #include<stdio.h>
     4 #include<stdlib.h>
     5 
     6 void yjia(int pass)
     7 {
     8     FILE *pfr;//读取1.txt
     9     FILE *pfw;//写入1jiay.txt
    10 
    11     char pathr[100] = "E:\1.txt";
    12     char pathw[100] = "E:\1jiay.txt";
    13 
    14     pfr = fopen(pathr, "r");//用读的模式打开被加密的文件
    15     pfw = fopen(pathw, "w");//用写的模式打开要写入加密的文件
    16 
    17     if (pfr == NULL || pfw == NULL)
    18     {
    19         printf("文件故障,加密失败");
    20         return;
    21     }
    22     
    23     while (!feof(pfr))//一直读到要加密的文本的末尾
    24     {
    25         char ch = fgetc(pfr);
    26         ch = ch ^ pass;//异或加密
    27         fputc(ch, pfw);//写入文本
    28     }
    29 
    30     fclose(pfr);
    31 }
    32 
    33 void yjie(int pass)
    34 {
    35     FILE *pfr;//读取1jiay.txt
    36     FILE *pfw;//写入1jiey.txt
    37 
    38     char pathr[100] = "E:\1jiay.txt";
    39     char pathw[100] = "E:\1jiey.txt";
    40 
    41     pfr = fopen(pathr, "r");//用读的模式打开加密以后的文件
    42     pfw = fopen(pathw, "w");//用写的模式打开要写入解密的文件
    43 
    44     if (pfr == NULL || pfw == NULL)
    45     {
    46         printf("文件故障,加密失败");
    47         return;
    48     }
    49 
    50     while (!feof(pfr))//一直读到要解密的文本的末尾
    51     {
    52         char ch = fgetc(pfr);
    53         ch = ch ^ pass;//异或加密
    54         fputc(ch, pfw);//写入文本
    55     }
    56 
    57     fclose(pfr);
    58 }
    59 
    60 main()
    61 {
    62     int pass = 5;
    63 
    64     yjia(pass);
    65 
    66     yjie(pass);
    67 
    68     system("pause"); 
    69 }

    打印汉字,必须要连着,否则会出现乱码

     1 #define _CRT_SECURE_NO_WARNINGS
     2 
     3 #include<stdio.h>
     4 #include<stdlib.h>
     5 
     6 main()
     7 {
     8     char str[5] = "我的";
     9 
    10     printf("%c%c", str[0], str[1]);
    11     //必须要连着,否则会出现乱码
    12     printf("%c %c", str[0], str[1]);
    13 
    14     system("pause"); 
    15 }

    //一个汉字2个字节,加上''有3个字节
    //2个汉字4个字节,加上''有5个字节

     1 #define _CRT_SECURE_NO_WARNINGS
     2 
     3 #include<stdio.h>
     4 #include<stdlib.h>
     5 
     6 main()
     7 {
     8     printf("%d
    ", sizeof(""));
     9     //一个汉字2个字节,加上''有3个字节
    10     printf("%d
    ", sizeof("我是"));
    11     //2个汉字4个字节,加上''有5个字节
    12 
    13     system("pause"); 
    14 }
      1 #define _CRT_SECURE_NO_WARNINGS
      2 
      3 #include<stdio.h>
      4 #include<stdlib.h>
      5 
      6 //feek可以移动到指定的位置进行读写
      7 //移动到尾部进行写入,移动到尾部前面几个字节进行写入
      8 main1()
      9 {
     10     FILE *pf = fopen("E:\1.txt", "r+");//r为读和写而打开文本文件
     11 
     12     if (pf == NULL)
     13     {
     14         printf("文件打开失败
    ");
     15     }
     16     else
     17     {
     18         printf("文件打开成功
    ");
     19 
     20         fseek(pf, 0, SEEK_END);//移动文件指针末尾
     21 
     22         fputs("hello", pf);//输出字符串
     23 
     24         fflush(pf);
     25 
     26         fseek(pf, 5, SEEK_END);//往前移动5个字节
     27 
     28         fputs("world", pf);//输出字符串
     29         
     30         fclose(pf);
     31     }
     32 
     33     system("pause");
     34 }
     35 
     36 //读取后面几个字符
     37 main2()
     38 {
     39     FILE *pf = fopen("E:\1.txt", "r+");//r为读和写而打开文本文件
     40 
     41     if (pf == NULL)
     42     {
     43         printf("文件打开失败
    ");
     44     }
     45     else
     46     {
     47         printf("文件打开成功
    ");
     48 
     49         fseek(pf, -10, SEEK_END);//往前移动5个字节
     50 
     51         while (!feof(pf))
     52         {
     53             char ch = fgetc(pf);//获取一个字符
     54             putchar(ch);
     55         }
     56 
     57         fclose(pf);
     58     }
     59 
     60     system("pause");
     61 }
     62 
     63 //读取前面几个字符
     64 main3()
     65 {
     66     FILE *pf = fopen("E:\1.txt", "r+");//r为读和写而打开文本文件
     67 
     68     if (pf == NULL)
     69     {
     70         printf("文件打开失败
    ");
     71     }
     72     else
     73     {
     74         printf("文件打开成功
    ");
     75 
     76         fseek(pf, 8, SEEK_SET);//从文件开头+8的位置开始读取
     77 
     78         while (!feof(pf))
     79         {
     80             char ch = fgetc(pf);//获取一个字符
     81             putchar(ch);
     82         }
     83 
     84         fclose(pf);
     85     }
     86 
     87     system("pause");
     88 }
     89 
     90 //修改前面几个字符
     91 main4()
     92 {
     93     FILE *pf = fopen("E:\1.txt", "r+");//r为读和写而打开文本文件
     94 
     95     if (pf == NULL)
     96     {
     97         printf("文件打开失败
    ");
     98     }
     99     else
    100     {
    101         printf("文件打开成功
    ");
    102 
    103         int i;
    104 
    105         for (i = 0;i < 8;i++)
    106         {
    107             fputc('1', pf);
    108         }
    109 
    110         printf("
    ");
    111         rewind(pf);
    112 
    113         while (!feof(pf))
    114         {
    115             char ch = fgetc(pf);
    116             putchar(ch);
    117         }
    118 
    119         fclose(pf);
    120     }
    121 
    122     system("pause");
    123 }
    124 
    125 //修改前面几个字符2
    126 main5()
    127 {
    128     FILE *pf = fopen("E:\1.txt", "r+");//r为读和写而打开文本文件
    129 
    130     if (pf == NULL)
    131     {
    132         printf("文件打开失败
    ");
    133     }
    134     else
    135     {
    136         printf("文件打开成功
    ");
    137 
    138         fseek(pf, 8, SEEK_SET);
    139 
    140         char ch;
    141 
    142         for (ch = '1';ch <= '5';ch++)
    143         {
    144             fputc(ch, pf);
    145         }
    146 
    147         rewind(pf);
    148 
    149         while (!feof(pf))
    150         {
    151             char ch = fgetc(pf);
    152             putchar(ch);
    153         }
    154 
    155         fclose(pf);
    156     }
    157 
    158     system("pause");
    159 }
    160 
    161 //fseek修改二进制文件
    162 main()
    163 {
    164     FILE *pf = fopen("E:\1.txt", "wb+");//r为写而打开一个二进制文件
    165 
    166     if (pf == NULL)
    167     {
    168         printf("文件打开失败
    ");
    169     }
    170     else
    171     {
    172         printf("文件打开成功
    ");
    173 
    174         double db[10] = { 1.1,2.2,3.3,4.4,5.5,6.6,7.7,8.8,9.9,10.10 };
    175 
    176         fwrite(db, sizeof(double), 10, pf);//写入一片内存,每个元素8个字节,一共10个到文件
    177 
    178         rewind(pf);
    179 
    180         double dbr[10];
    181 
    182         fread(dbr, sizeof(double), 10, pf);//读取二进制
    183 
    184         int i;
    185         for (i = 0;i < 10;i++)
    186         {
    187             printf("%f
    ", dbr[i]);
    188         }
    189     
    190         fclose(pf);
    191     }
    192 
    193     system("pause");
    194 }

    打开文件,一定要关闭文件。

    fclose有一个动作,就是将文件缓冲区的内容,写入到文本。如果程序意外关闭,没有调用fclose,文件数据丢失

    r读,w写,+可读可写,b二进制,t就是文本

    既没有b也没有t,不强调是二进制还是文本,普遍适用

    fopen

    //若文件不存在,则新建文件
    //若文件存在,则文件长度清零,则该文件内容会消失
    //wb只允许写数据

     1 #define _CRT_SECURE_NO_WARNINGS
     2 
     3 #include<stdio.h>
     4 #include<stdlib.h>
     5 
     6 //若文件不存在,则新建文件
     7 //若文件存在,则文件长度清零,则该文件内容会消失
     8 //wb只允许写数据
     9 main()
    10 {
    11     char path[40] = "E:\WB.txt";
    12 
    13     FILE *pf = fopen(path, "wb");//按照写的方式打开文件
    14 
    15     if (pf == NULL)
    16     {
    17         printf("fail");
    18     }
    19     else
    20     {
    21         printf("succes
    ");
    22 
    23         float fl[5] = { 1.0,2.0,3.0,4.0,5.0 };
    24 
    25         fwrite(fl, 4, 5, pf);//将数组这一片内存写入文件
    26 
    27         rewind(pf);//移动指针到开头
    28 
    29         float flx[5] = { 0.0 };
    30 
    31         int res = fread(flx, 4, 5, pf);//将文件读入内存
    32 
    33         printf("%d
    ", res);
    34 
    35         if (res != 5)
    36         {
    37             printf("fail");
    38         }
    39         else
    40         {
    41             printf("succes
    ");
    42         }
    43         fclose(pf);//关闭文件指针
    44     }
    45     system("pause");
    46 }

    fopen

    //若文件不存在,则新建文件
    //若文件存在,则文件长度清零,则该文件内容会消失
    //w+模式既能写也能读

     1 #define _CRT_SECURE_NO_WARNINGS
     2 
     3 #include<stdio.h>
     4 #include<stdlib.h>
     5 
     6 //若文件不存在,则新建文件
     7 //若文件存在,则文件长度清零,则该文件内容会消失
     8 //w+模式既能写也能读
     9 main()
    10 {
    11     char path[40] = "E:\WJ.txt";
    12 
    13     FILE *pf = fopen(path, "w+");//按照w+写的方式打开文件
    14 
    15     if (pf == NULL)
    16     {
    17         printf("fail");
    18     }
    19     else
    20     {
    21         printf("succes
    ");
    22 
    23         fputs("hello", pf);//写入
    24 
    25         rewind(pf);//文件指针移动到开头
    26 
    27         char ch = fgetc(pf);//从文件读取一个字符保存到ch
    28                             //fgetc如果执行成功,就会返回读取的字符
    29 
    30         printf("%d
    ", ch);//执行失败,返回-1
    31 
    32         putchar(ch);
    33 
    34         putchar(ch);
    35 
    36         fclose(pf);//关闭文件指针
    37     }
    38 
    39     system("pause");
    40 }

    fopen

    r+打开可读写的文件,该文件必须存在,存在就可以读且写

     1 #define _CRT_SECURE_NO_WARNINGS
     2 
     3 #include<stdio.h>
     4 #include<stdlib.h>
     5 
     6 //r+打开可读写的文件,该文件必须存在,存在就可以读且写
     7 main()
     8 {
     9     char path[40] = "E:\Z.txt";
    10 
    11     FILE *pf = fopen(path, "r+");//按照写的方式打开文件
    12 
    13     if (pf == NULL)
    14     {
    15         printf("fail");
    16     }
    17     else
    18     {
    19         printf("succes
    ");
    20 
    21         while (!feof(pf))//判断文件是否到了末尾
    22         {
    23             char ch = fgetc(pf);//从文件读取一个字符保存到ch
    24             putchar(ch);//输出这个字符
    25         }
    26 
    27         int res = fputc('A', pf);//写入不会报错,但是写入会失败
    28 
    29         printf("%d
    ", res);
    30 
    31         if (res == -1)
    32         {
    33             printf("fail");
    34         }
    35         else
    36         {
    37             printf("succes");
    38         }
    39         fclose(pf);//关闭文件指针
    40     }
    41 
    42     system("pause");
    43 }

    fopen

    w写

     1 #define _CRT_SECURE_NO_WARNINGS
     2 
     3 #include<stdio.h>
     4 #include<stdlib.h>
     5 
     6 //若文件不存在,则新建文件
     7 //若文件存在,则文件长度清零,则该文件内容会消失
     8 //w模式只能写,不能读
     9 main()
    10 {
    11     char path[40] = "E:\W.txt";
    12 
    13     FILE *pf = fopen(path, "w");//按照写的方式打开文件
    14 
    15     if (pf == NULL)
    16     {
    17         printf("fail");
    18     }
    19     else
    20     {
    21         printf("succes
    ");
    22 
    23         fputs("hello", pf);//写入
    24 
    25         rewind(pf);//文件指针移动到开头
    26 
    27         char ch = fgetc(pf);//从文件读取一个字符保存到ch
    28                             //fgetc如果执行成功,就会返回读取的字符
    29 
    30         printf("%d
    ", ch);//执行失败,返回-1
    31 
    32         putchar(ch);
    33 
    34         putchar(ch);
    35 
    36         fclose(pf);//关闭文件指针
    37     }
    38 
    39     system("pause");
    40 }

    fopen

    r读

     1 #define _CRT_SECURE_NO_WARNINGS
     2 
     3 #include<stdio.h>
     4 #include<stdlib.h>
     5 
     6 //r该文件必须存在,不存在打开失败
     7 //打开成功,我们就可以进行读的操作
     8 //进行写的操作的时候,不会提示错误,但是会操作失败
     9 main()
    10 {
    11     char path[40] = "E:\X.txt";
    12 
    13     FILE *pf = fopen(path, "r");//按照读的方式打开文件
    14 
    15     if (pf == NULL)
    16     {
    17         printf("fail");
    18     }
    19     else
    20     {
    21         printf("succes
    ");
    22 
    23         while (!feof(pf))//判断文件是否到了末尾
    24         {
    25             char ch = fgetc(pf);//从文件读取一个字符保存到ch
    26             putchar(ch);//输出这个字符
    27         }
    28 
    29         int res = fputc('A', pf);//写入不会报错,但是写入会失败
    30 
    31         printf("%d
    ", res);
    32 
    33         if (res == -1)
    34         {
    35             printf("fail");
    36         }
    37         else
    38         {
    39             printf("succes");
    40         }
    41         fclose(pf);//关闭文件指针
    42     }
    43 
    44     system("pause");
    45 }

    例16.1

    把从键盘输入的文本按原样输出到名为 file_a.dat 的文件,用字符@作为键盘输入结束标志。

    (1)打开文件。

    (2)从键盘输入一个字符。

    (3)判断输入的字符是否是@。若是,结束循环,执行步骤(7)。

    (4)把刚输入的字符输出到指定的文件中。

    (5)从键盘输入一个字符。

    (6)重复步骤(3)至(5)。

    (7)关闭文件。

    (8)程序结束。

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 
     4 main()
     5 {
     6     FILE * fpout;
     7     char ch;
     8     if ((fpout = fopen("file_a.dat", "w")) == NULL)
     9     {
    10         printf("Can't open this file!
    ");
    11         exit(0);
    12     }
    13     ch = getchar();
    14     while (ch != '@')
    15     {
    16         fputc(ch, fpout);
    17         ch = getchar();
    18     }
    19     fclose(fpout);
    20 }

    例16.2

    把一个已存在磁盘上的 file_a.dat 文本文件中的内容原样输出到终端屏幕上。

    (1)打开文件。

    (2)从指定文件中读入一个字符。

    (3)判断读入的是否是文件结束标志。若是,结束循环,执行步骤(7)。

    (4)把刚输入的字符输出到终端屏幕。

    (5)从文件中再读入一个字符。

    (6)重复步骤(3)至(5)。

    (7)关闭文件。

    (8)程序结束。

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 
     4 main()
     5 {
     6     FILE * fpin;
     7     char ch;
     8     if ((fpin = fopen("file_a.dat", "r")) == NULL)
     9     {
    10         printf("Can't open this file!
    ");
    11         exit(0);
    12     }
    13     ch = fgetc(fpin);
    14     while (ch != EOF)
    15     {
    16         putchar(ch);
    17         ch = fgetc(fpin);
    18     }
    19     fclose(fpin);
    20 }

    123

  • 相关阅读:
    discuz对PHP7不支持mysql的兼容性处理
    mysql 5.6 设置root初始密码正确步骤,避免入坑
    当root用户无密码,非超级权限用户时提示mysqladmin: Can't turn off logging; error: 'Access denied; you need the SUPER privilege for this op解决方案
    部署 LAMP (CentOS 7.2),摘自阿里云,方便查看使用
    Win32 API编程:网络编程在设置WSAAsyncSelect模型后connect的返回值问题
    指针、指针变量梳理,取地址与取值运算
    C++/VC中ANSI与UNICODE中字符定义和函数对照表
    com.google.gson的SerializedName解决实体类与关键字的重名
    【Java】BigDecimal
    【MySQL】去重
  • 原文地址:https://www.cnblogs.com/denggelin/p/5452303.html
Copyright © 2011-2022 走看看