C语言实现从指定位置(偏移地址)截取文件内容

源代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>
#include <sys/stat.h>
#include <sys/types.h>

#define FILE_OFFSET 10  
#define EXE_ABORT() {system("pause");return 0;}

#define FILE_NAME_I "./test.txt"
#define FILE_NAME_O "./test_out.txt" 

int main(int argc, char *argv[])
{
    uint32_t offset = FILE_OFFSET;
    char filename_i[300];
    char filename_o[300];
    FILE *fp_i;
    FILE *fp_o;
    char ch = 0;
    int ret = 0;

    struct stat stat_i;
    struct tm *tm_p;
    
    strcpy(filename_i, FILE_NAME_I);
    strcpy(filename_o, FILE_NAME_O);
    
    printf("filname_i = %s\n", filename_i);
    printf("filname_o = %s\n", filename_o);

    ret = stat(filename_i, &stat_i);
    if(ret != 0)
    {
        printf("%s: get file stat failed", filename_i);
        EXE_ABORT();
    }
    printf("get file stat success\n");
    //! 文件的大小,字节为单位
    printf("size of the file in bytes: %.02f MB (%d Bytes)\n", stat_i.st_size / 1024.0, stat_i.st_size);//    
    
    fp_i = fopen(filename_i, "rb");
    fp_o = fopen(filename_o, "wb");

    if(fp_i == NULL)
    {
        printf("%s open failed\n", filename_i);
        EXE_ABORT();
    }

    if(fp_o == NULL)
    {
        printf("%s open failed\n", filename_o);
        EXE_ABORT();
    }

    printf("offset = %d(0x%x)\n", offset, offset);
    fseek(fp_i, offset, SEEK_SET);

    while(1)
    {
        ch = fgetc(fp_i);
        if(feof(fp_i))
            break ;
        fputc(ch, fp_o);
    }

    fclose(fp_i);
    fclose(fp_o);

    printf("截取完成\n");

    system("pause");
    return 0;
}

运行结果:


输入文件test.txt内容:

1234567890ABCDEFGHIJKLMOPQRSTUVWXYS

偏移量设定为10,截取后的test_out.txt文件内容:

ABCDEFGHIJKLMOPQRSTUVWXYS

更方便的,可以argc参数,来实现通过指定输入文件路径和指定偏移量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

whik1194

如果对你有帮助,欢迎打赏。谢谢

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值