c语言文件操作总结

1 文件指针

我们对文件进行一系列的操作——打开文件、关闭文件、向文件中写入数据、从文件中读出数据。所有的操作都离不开文件指针。
文件指针: FILE*
FILE:每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息(文件的名字,文件状态及文件当前的位置等)。这些信息是保存在一个结构体变量中,取名FILE。
FILE* :通过一个FILE的指针来维护这个FILE结构的变量,对文件进行操作。
FILE* pf;//文件指针变量
pf是一个指向FILE类型数据的指针变量。即通过文件指针变量能够找到与它关联的文件。

2 文件的打开与关闭

2.1 fopen函数

在C语言中,操作文件之前应该先打开文件。使用 <stdio.h> 头文件中的 fopen() 函数可以打开文件。
用法如下:
FILE * fopen ( const char * filename, const char * mode );
第一个参数filename为文件名(包括文件路径),第二个参数mode为打开方式。若打开成功,fopen返回一个结构指针地址,否则返回NULL。
如果没有指定文件路径,则默认为当前工作目录。
例:
//首先定义文件指针:fp
FILE *fp;
//用fopen()函数卡开文件, r——>以只读方式打开
fp = fopen(“test.txt”, “r”); //没有指定文件路径,则默认为当前工作目录。

2.2 fclose函数

在执行完文件的操作后,要用 fclose() 函数进行“关闭文件”操作。以此释放相关资源,避免数据丢失。同时也可提高系统整体的执行效率。
fclose() 的用法为:int fclose(FILE *fp);
//fp 为文件指针,关闭文件代码如下:
fclose(fp);
关闭成功返回值0,否则返回非零值。
以下是文件的打开方式:
在这里插入图片描述

3 文件读写函数

在这里插入图片描述

4文件读函数

4.1 getc()函数

从文件中读取单个字符,读取到结尾以后返回EOF。

#include<stdio.h>
int main()
{
    FILE *f;
    if((f=fopen("E:/a.txt","r+"))==NULL){
        printf("打开文件失败!!!");
        return -1;
    };
    char ch;
    while ((ch=getc(f))!=EOF){
        printf("%c",ch) ;
    }
    fclose(f);
    return 0;
}

4.2 fgets()函数

从指定的流中读取数据,每次读取一行。
原型为:char *fgets(char *str, int n, FILE *stream); 从指定的流 stream 读取一行,并把它存储在 str 所指向的字符串内。

#include<stdio.h>
int main()
{
    FILE *f;
    if((f=fopen("E:/a.txt","r+"))==NULL){
        printf("打开文件失败!!!");
        return -1;
    };
    char ch[5];
    while (fgets(ch,4,f)){
        printf("%s",ch) ;
    }
    fclose(f);
    return 0;
}

4.3 fscanf函数

fscanf 函数原型为 int fscanf(FILE * stream, const char * format, [argument…]); 其功能为根据数据格式(format),从输入流(stream)中读入数据,存储到argument中,遇到空格和换行时结束。fscanf位于C标准库头文件<stdio.h>中。

4.4 fread函数

原型:size_t fread( void *buffer, size_t size, size_t count, FILE *stream )
Buffer:是读取的数据存放的内存的指针
size :是每次读取的字节数
count:是读取次数
strean:是要读取的文件的指针

#include<stdio.h>
int main()
{
    FILE *f;
    if((f=fopen("E:/a.txt","r+"))==NULL){
        printf("打开文件失败!!!");
        return -1;
    };
    char ch[40];
    fread(ch,4,3,f);
    printf("%s",ch);
    fclose(f);
    return 0;
}

5文件写函数

5.1 fputc函数

原型:int fputc(int char, FILE *stream),把参数 char 指定的字符(一个无符号字符)写入到指定的流 stream 中,并把位置标识符往前移动。

#include <stdio.h>
#include <string.h>
int main(void)
{
    FILE *f;
    if((f = fopen("E:/a.txt","r+"))==NULL){
        printf("打开文件错误!!!");
    }
    char msg[]="Hello world";
    int i=0;
    fseek(f,0,2);
    while(msg[i]&&(i<strlen(msg)))
    {
        fputc(msg[i],f);
        i++;
    }
    return 0;
}

5.2 fputs

向指定的文件写入一个字符串(不自动写入字符串结束标记符‘\0’)。成功写入一个字符串后,文件的位置指针会自动后移,函数返回值为非负整数;否则返回EOF(符号常量,其值为-1)。

#include <stdio.h>

int main(void)
{
    FILE *f;
    if((f = fopen("E:/a.txt","r+"))==NULL){
        printf("打开文件错误!!!");
    }
    char *msg ="Hello world";
    fputs(msg,f);
    return 0;
}

5.3 fwrite函数

size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream),功能是向指定的文件中写入若干数据块,如成功执行则返回实际写入的数据块数目。该函数以二进制形式对文件进行操作,不局限于文本文件。写入到文件的哪里? 这个与文件的打开模式有关,如果是w+,则是从file pointer指向的地址开始写,替换掉之后的内容,文件的长度可以不变,stream的位置移动count个数;如果是a+,则从文件的末尾开始添加,文件长度加大。
ptr-- 这是指向要被写入的元素数组的指针。
size-- 这是要被写入的每个元素的大小,以字节为单位。
nmemb-- 这是元素的个数,每个元素的大小为 size 字节。
stream-- 这是指向 FILE 对象的指针,该 FILE 对象指定了一个输出流。
#include <stdio.h>

int main(void)
{
    FILE *f;
    if((f = fopen("E:/a.txt","r+"))==NULL){
        printf("打开文件错误!!!");
    }
    int arr[]={21,3245,56,45,676};
    int *msg =arr;
    fwrite(msg,4,2,f);
    return 0;
}

5.4 fprinf

函数原型为int fprintf( FILE *stream, const char *format, [ argument ]…),fprintf()函数根据指定的格式(format),向输出流(stream)写入数据
https://www.runoob.com/cprogramming/c-function-fprintf.html

6文件指针移动函数

6.1 fseek

int fseek(FILE *stream, long offset, int fromwhere);fseek 用于二进制方式打开的文件,移动文件读写指针位置. 第一个参数stream为文件指针
第二个参数offset为偏移量,整数表示正向偏移,负数表示负向偏移
第三个参数origin设定从文件的哪里开始偏移,可能取值为:SEEK_CUR、 SEEK_END 或 SEEK_SET
SEEK_SET: 文件开头
SEEK_CUR: 当前位置
SEEK_END: 文件结尾
其中SEEK_SET,SEEK_CUR和SEEK_END和依次为0,1和2.
fseek(fp,100L,0);把fp指针移动到离文件开头100字节处;
fseek(fp,100L,1);把fp指针移动到离文件当前位置100字节处;
fseek(fp,100L,2);把fp指针退回到离文件结尾100字节处。、

6.2 rewind

功 能: 将文件指针重新指向一个流的开头 用 法: int rewind(FILE *stream);

6.3 ftell

函数原型: long ftell(FILE *fp)
函数功能:得到流式文件的当前读写位置,其返回值是当前读写位置偏离文件头部的字节数.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值