C语言分析——文件操作

本文详细介绍了C语言中的文件操作,包括相对路径转换函数realpath、文件指针定位fseek,以及读取文件的多种方法如fgetc、fgets、fscanf,还有写入文件的fputc、fputs、fprintf和fwrite等函数的使用示例和效果展示。
摘要由CSDN通过智能技术生成

头文件:#include

文件操作工具函数

相对路径转换函数:realpath

头文件:#include

设置文件当前指针:fseek

原型:int fseek(FILE *stream, long offset, int fromwhere)
功能:设置文件指针的位置。

参数:
offset:偏移量,以字节为单位正数表示正向偏移,负数表示负向偏移。
fromwhere:偏移起始位置

#define     SEEK_SET        0   //文件头
#define     SEEK_CUR        1   //当前位置
#define     SEEK_END        2   //文件尾

例如

fseek(fp,56L,0);        //把fp指针移动到从文件开头起始,往正方向的56个字节处;
fseek(fp,34L,1);        //把fp指针移动到从当前位置起始,往正方向的34个字节处;
fseek(fp,-78L,2);       //把fp指针移动到从结尾位置起始,往负方向的78个字节处。

读取文件

读取的文本文件:read.txt

test read txt admin
This is a read test.

文本文件的第三行有一个回车

读取一个字符函数:fgetc

函数原型:int fgetc(FILE *stream);

功能:从文件流steam中读取一个字符。

源码

static int Test_fgetc(int argc,char *argv[])
{
    char ch = 0;                    //字符保存缓冲区

    if(NULL == argv[1])
    {
        return -1;
    }

    char *real_path = realpath(argv[1],0);  //相对路径转换绝对路径

    FILE *fp = fopen(real_path,"r");        //打开文件
    if(!fp)
    {
        printf("%s can not be opened.\n",argv[1]);
        return -1;
    }

    while((ch = fgetc(fp))!=EOF)    //判断读取的字符是否是文件结束符  
    {  
        putchar(ch);                //输出字符 
    } 

    fclose(fp); 

    return 0;
}

运行结果

$ ./prj/project.o read.txt 
test read txt admin
This is a read test.
$

读取一个字符串函数:fgets

函数原型:char *fgets(char *s, int size, FILE *stream);

该函数读到一个回车键就结束了,读取字符串的时候一定要注意读取的文件包含的回车键。

源码:

static int Test_fgets(int argc,char *argv[])
{
    if(NULL == argv[1])
    {
        return -1;
    }

    char *real_path = realpath(argv[1],0);

    FILE *fp = fopen(real_path,"r");
    if(!fp)
    {
        printf("%s can not be opened.\n",argv[1]);
        return -1;
    }

    fseek(fp,0L,SEEK_END);          //定位到文件末尾
    int flen = (int)ftell(fp);          //获取得到文件大小
    fseek(fp,0L,SEEK_SET);

    char *chs = (char *)malloc(flen+1);     //分配空间
    if(chs == NULL)
    {
        fclose(fp);
        return 0;
    }
memset((void *)chs,0,flen+1);   

    fgets(chs,flen,fp); //由于读取的文件有两行因此读取两次结果
    printf("%s",chs);
    fgets(chs,flen,fp); 
    printf("%s",chs);

free(chs);
    fclose(fp); 

chs = NULL;

    return 0;
}

执行结果

$ ./prj/project.o read.txt 
test read txt admin
This is a read test.
$

格式化读取字符串函数:fscanf

函数原型:int fscanf(FILE *stream, const char *format, …);

该函数读到一个空格键就结束了,读取字符串的时候一定要注意读取的文件包含的空格键。该函数一般作为读取类似表格数值时使用。

1、作为读取函数
源码

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值