【黑马程序员】c语言的文件操作

本文介绍了C语言中如何进行文件操作,包括读写文件、文件指针的概念以及fopen、fclose、fread和fwrite等函数的使用。通过示例展示了读取和写入文件的基本流程,并提到了文件权限和错误处理的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



----------   IOS培训 java培训 、期待与您交流! ----------



所谓“文件”是指一组相关数据的有序集合。这个数据集有一个名称,叫做文件名。实际上在前面的各章中我们已经多次使用了文件,例如源程序文件、目标文件、可执行文件、库文件(头文件)等。

文件操作

通过程序,操作文件

读    文件->内存

写    内存->文件


在C语言中用一个指针变量指向一个文件,这个指针称为文件指针。通过文件指针就可对它所指的文件进行各种操作。


定义说明文件指针的一般形式为:
    FILE  *指针变量标识符;
其中FILE应为大写,它实际上是由系统定义的一个结构,该结构中含有文件名、文件状态和文件当前位置等信息。在编写源程序时不必关心FILE结构的细节。例如:
    FILE  *fp;
表示fp是指向FILE结构的指针变量,通过fp即可找存放某个文件信息的结构变量,然后按结构变量提供的信息找到该文件,实施对文件的操作。习惯上也笼统地把fp称为指向一个文件的指针。


   //FILE *  fopen(<#const char *restrict#>, <#const char *restrict#>)

   //sodo whoami  用户权限变成root  chmod -r file取消用户对file文件的读权限

    FILE *fp=fopen("./file", "r");

    if (!fp) {

        perror("fopen error");

        exit(-1);

    }

    

    

    //  size_t  fread(<#void *restrict#>, <#size_t#>, <#size_t#>, <#FILE *restrict#>)

    char buf[64] ={};

    // 任意变量类型的地址,只要是空间就行。 一次单位的信息是多少字节,所以单位的信息占一字节,这们的信息最多读63个,fp代表文件

    

    //假如我们的file文件存的是hello World! 则打印出的ret有13个字节

    size_t ret = fread(buf, 1, 63, fp);

    printf("%s %ld\n",buf ,ret);

    fclose(fp);


最后别忘记要对文件关闭,不然可能会出现一些不安全因素。


可能报错的有:

fopen error: No such file or directory

Program ended with exit code: 255  找不到该文件 或目录


  FILE *fp2=fopen("./file", "w");  //如果文件不存在,会创建文件 ,如果已经存在,则清空

  //  如果是“a”,则代表追加,原文件内容还在,只是在其后面添加内容


    if (!fp2) {

        perror("fopen error");

        exit(-1);

    }

    // size_t 类型是什么呢。官方给出的解释是:typedef __SIZE_TYPE__ size_t; 我们把他看作字节数就可。

    // size_t fwrite(<#const void *restrict#>, <#size_t#>, <#size_t#>, <#FILE *restrict#>)

    fwrite("hello world!!", 1, strlen("hello world!!"), fp2);

    fwrite("hello world!!", 1, strlen("hello world!!"), fp2);//如果写两个fwrite则有两个文件产生

    

    fclose(fp2);





使用文件的方式共有12种,下面给出了它们的符号和意义。

文件使用方式意义
rt只读打开一个文本文件,只允许读数据
wt只写打开或建立一个文本文件,只允许写数据
at追加打开一个文本文件,并在文件末尾写数据
rb只读打开一个二进制文件,只允许读数据
wb只写打开或建立一个二进制文件,只允许写数据
ab追加打开一个二进制文件,并在文件末尾写数据
rt+读写打开一个文本文件,允许读和写
wt+读写打开或建立一个文本文件,允许读写
at+读写打开一个文本文件,允许读,或在文件末追加数据
rb+读写打开一个二进制文件,允许读和写
wb+读写打开或建立一个二进制文件,允许读和写
ab+读写打开一个二进制文件,允许读,或在文件末追加数据


简要说明:文件使用方式由r、w、a、t、b 和 + 六个字符拼成,各字符的含义是:
    r(read):读
    w(write):写
    a(append):追加
    t(text):文本文件,可省略不写
    b(banary):二进制文件
    +:读和写







    

下面演示一个从文件1当中读取内容到内存,后将内存当中的数据(读取到的内容)写入到文件2中去。
#include <stdio.h>
#include<stdlib.h>
#include <string.h>
void readwitre(){
    FILE *fp =fopen("./file1", "r"); //r+为读的权限上加上写的权限
    if (!fp) {
        perror("fopen error file1");
        exit(-1);
    }
    char buf[20];
  
    FILE *fp2 =fopen("./file2", "w");//w+为在写的权限上加上读的权限
    if (!fp2) {
        perror("fopen error file2");
        exit(-1);
    }

    while (1) {
          size_t ret = fread(buf, 1, 20, fp);
        if (ret<=0) {
            break;  //如果读完,则退出
        }
        fwrite(buf, 1, ret, fp2);//否则读到字节,则写入多少字节到flie 中  注意ret不能写成20
    }
    //如file1文件中有61个字节。则每次读20个字节,读三次,第四次读1个字节,然后程序结束,每次写入的内容会追加到文件内容后面。
    fclose(fp2);
    fclose(fp);
}


补充:
移动文件内部位置指针的函数主要有两个,即rewind()和fseek()。

rewind函数前面已多次使用过,其调用形式为:
    rewind(文件指针);
它的功能是把文件内部的位置指针移到文件首。

下面主要介绍fseek函数。fseek函数用来移动文件内部位置指针,其调用形式为:
    fseek(文件指针,位移量,起始点);

0代表文件首
1代表当前位置
2代表文件末尾
例如:
    fseek(fp,100L,0);
其意义是把位置指针移到离文件首100个字节处。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值