一 利用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;
}