一、思维导图

二、读取文件,效果类似cat的功能
#include <IOhead.h>
int main(int argc, const char *argv[])
{
FILE *fp=fopen("./homework_1.txt","r");
if(NULL==fp)
{
ERRORLOG("fopen error");
return -1;
}
rewind(fp);
char buf[128];
while(1)
{
memset(buf,0,sizeof(buf));
if(NULL==fgets(buf,sizeof(buf),fp))
{
printf("打印到文件末尾或打印失败\n");
break;
}
buf[strlen(buf)-1]='\0';
printf("%s\n",buf);
}
if(EOF==fclose(fp))
{
printf("fclose error\n");
return -2;
}
printf("文件关闭\n");
return 0;
}

三、通过argc和argv输入文件名和路径,请实现文件的拷贝
#include <IOhead.h>
int main(int argc, const char *argv[])
{
// 检查参数
if(argc != 3)
{
fprintf(stderr,"用法: %s <源文件> <目标文件>\n", argv[0]);
return -1;
}
//以只读方式打开源文件
FILE *src = fopen(argv[1], "r");
if(src == NULL)
{
ERRORLOG("打开源文件失败");
return -2;
}
//以只写方式打开目标文件
FILE *dst = fopen(argv[2], "w");
if(dst == NULL)
{
ERRORLOG("打开目标文件失败\n");
fclose(src); // 关闭已打开的源文件
return -3;
}
// 逐字节拷贝
int flag;
while((flag = fgetc(src)) != EOF)
{
if(fputc(flag, dst) == EOF)
{
ERRORLOG("目标文件写入失败\n");
fclose(src); //关闭已打开的源文件
fclose(dst); //关闭已打开的目标文件
return -3;
}
}
// 关闭文件
if(fclose(src) == EOF)
{
ERRORLOG("关闭源文件失败\n");
return -4;
}
if(fclose(dst) == EOF)
{
ERRORLOG("关闭目标文件失败\n");
return -5;
}
printf("文件拷贝成功: from '%s' to '%s'.\n", argv[1], argv[2]);
return 0;
}

四、通过argc和argv输入文件名和路径,请计算文件的行数
#include <IOhead.h>
int main(int argc, const char *argv[])
{
// 检查参数
if(argc != 2)
{
fprintf(stderr,"用法: %s <文件名> \n", argv[0]);
return -1;
}
//以只读方式打开文件
FILE *dst = fopen(argv[1], "r");
if(dst == NULL)
{
ERRORLOG("打开源文件失败");
return -2;
}
//逐行读取文件
int sum_line=0;
char buf[128];
while(1)
{
memset(buf,0,sizeof(buf));
if(NULL==fgets(buf,sizeof(buf),dst))
{
if(0==sum_line)
{
printf("文件读取失败,无法计算行数\n");
return -3;
}
printf("文件读取结束,行数为:%d\n",sum_line);
break;
}
buf[strlen(buf)-1]='\0';
sum_line++;
printf("%s\n",buf);
}
// 关闭文件
if(fclose(dst) == EOF)
{
ERRORLOG("关闭文件失败\n");
return -4;
}
return 0;
}
