1.使用fgets设计给定文件的行号
1.1代码
#include <myhead.h>
int main(int argc, char const *argv[])
{
//定义文件指针
FILE *fp = NULL;
if ((fp = fopen("./destfile.txt", "w")) == NULL)
{
perror("fopen erroe");
return -1;
}
printf("open success\n");
//向文件中写入字符串
fputs("hello world\n", fp);
fputs("hello 520\n", fp);
fputs("hello 1314\n", fp);
fputs("hello 2001\n", fp);
fputs("hello 2008\n", fp);
fputs("hello 666\n", fp);
fputs("hello 999\n", fp);
//关闭文件
fclose(fp);
//以只读的形式重新打开文件
if ((fp = fopen("./destfile.txt", "r")) == NULL)
{
perror("fopen erroe");
return -1;
}
//循环读取数据
char buf[200] = "";
int cont = 0; //记录行数
while (1)
{
//清空容器
bzero(buf, sizeof(buf));
if (fgets(buf, sizeof(buf), fp) == NULL)
{
break; //说明文件读取结束
}
cont++;
}
printf("该文件的行数=%d\n", cont);
//关闭文件
fclose(fp);
return 0;
}
为了清楚明了,我没传递一个文件,而是自己创造了一个destfile.txt文件,同时在该程序中向其输入了文档。
1.2运行结果
destfile.txt文件中内容:
2.使用fget,fputs完成两个文件的拷贝
2.1代码
#include<myhead.h>
int main(int argc, char const *argv[])
{
//判断传入的文件是否是3个
if(argc!=3)
{
printf("传入错误\n");
return -1;
}
//以只读的形式打开源文件
FILE *sfp=NULL;
if((sfp=fopen(argv[1],"r"))==NULL)
{
printf("源文件open error!\n");
return -1;
}
//以只写的形式打开目标文件
FILE *dfp=NULL;
if((dfp=fopen(argv[2],"w"))==NULL)
{
printf("目标文件open error!\n");
return -1;
}
//定义搬运工
char buf[200]=" ";
//循环从源文件中读取数据放入到目标文件中
while(1)
{
//清空容器
bzero(buf,sizeof(buf));
//循环结束条件
if(fgets(buf,sizeof(buf),sfp)==NULL)
{
break;
}
//将读取的数据写入目标文件中
fputs(buf,dfp);
}
//关闭文件
fclose(sfp);
fclose(dfp);
printf("拷贝成功\n");
return 0;
}
2.2运行结果
我用上一题时创建的 destfile.txt 文件为源文件,再创建一个空白文件 newfile.txt 文件,运营后,目标文件 newfile.txt 也是成功拷贝了。