Linux自学day21-拷贝图片,统计字符,文件IO,目录IO

一  利用fread和fwrite实现图片内容的拷贝

// 函数功能:将源文件的内容复制到目标文件
// 参数:
// pdstfile:目标文件的路径
// psrcfile:源文件的路径
// 返回值:
// 0:复制成功
// -1:打开文件失败
int copy_file(char *pdstfile, char *psrcfile)
{
    FILE *fsrc = NULL;  // 定义一个文件指针,用于指向源文件
    FILE *fdst = NULL;  // 定义一个文件指针,用于指向目标文件
    char tmpbuff[4096] = {0};  // 定义一个缓冲区,用于临时存储从源文件读取的数据
    size_t nret = 0;  // 用于存储每次读取的字节数

    // 以只读模式打开源文件
    fsrc = fopen(psrcfile, "r");
    // 检查源文件是否成功打开,如果失败则返回 -1
    if (NULL == fsrc)
    {
        return -1;
    }

    // 以写入模式打开目标文件
    fdst = fopen(pdstfile, "w");
    // 检查目标文件是否成功打开,如果失败则返回 -1
    if (NULL == fdst)
    {
        return -1;
    }

    // 循环读取源文件内容并写入目标文件
    while (1)
    {
        // 从源文件读取数据到缓冲区,每次最多读取 4096 字节
        nret = fread(tmpbuff, 1, sizeof(tmpbuff), fsrc);
        // 如果读取的字节数为 0,表示已经读取到文件末尾,退出循环
        if (0 == nret)
        {
            break;
        }
        // 将缓冲区中的数据写入目标文件
        fwrite(tmpbuff, 1, nret, fdst);
    }

    // 关闭目标文件
    fclose(fdst);
    // 关闭源文件
    fclose(fsrc);

    return 0;
}


int main(int argc, const char **argv)
{
    char srcfile[32] = {0};  // 定义一个字符数组,用于存储源文件的路径
    char dstfile[32] = {0};  // 定义一个字符数组,用于存储目标文件的路径

    printf("请输入源文件:\n");
    // 读取用户输入的源文件路径
    gets(srcfile);

    printf("请输入目的文件:\n");
    // 读取用户输入的目标文件路径
    gets(dstfile);

    // 调用 copy_file 函数进行文件复制
    copy_file(dstfile, srcfile);
    

    return 0;
}

 二   统计字符

编写程序获得一个文件中出现哪些字符?及每种字符出现的次数?及哪种字符出现的次数最多?

// main函数是程序的入口点,argc表示命令行参数的数量,argv是指向参数字符串的指针数组
int main(int argc, const char **argv)
{
    // 定义一个字符数组filename,用于存储用户输入的文件名,初始化为全0
    char filename[256] = {0};
    // 定义一个文件指针fp,初始化为NULL
    FILE *fp = NULL;
    // 定义一个整型数组cnt,用于统计每个字符出现的次数,初始化为全0
    int cnt[256] = {0};
    // 定义一个字符变量ch,用于存储从文件中读取的字符,初始化为0
    char ch = 0;
    // 定义两个整型变量max和min,分别用于存储出现次数最多和最少的字符的ASCII码值,初始化为0
    int max = 0;
    int min = 0;
    // 定义一个整型变量i,用于循环计数,初始化为0
    int i = 0;

    // 提示用户输入文件名
    printf("请输入文件名:\n");
    // 从标准输入读取用户输入的文件名,存储到filename数组中
    gets(filename);

    // 以只读方式打开用户输入的文件
    fp = fopen(filename, "r");
    // 判断文件是否打开成功,如果打开失败
    if (NULL == fp)
    {
        // 调用ERR_MSG函数输出错误信息,这里ERR_MSG应该是在public.h中定义的宏或函数
        ERR_MSG("fail to fopen");
        // 返回-1表示程序异常退出
        return -1;
    }

    // 进入一个无限循环,用于读取文件中的字符
    while (1)
    {
        // 从文件中读取一个字符
        ch = fgetc(fp);
        // 判断是否读到文件末尾,如果是则跳出循环
        if (EOF == ch)
        {
            break;
        }
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值