一、使用fread和fwrite完成两个文件的拷贝,要求源文件和目标文件由外界输入
代码如下:
#include <myhead.h> int main(int argc, const char *argv[]) {//判断是否输入两个文件名if(argc!=3){fprintf(stderr,"文件个数错误");return -1;}//以读形式打开文件FILE *fp=fopen(argv[1],"r");//以写形式打开文件FILE *fq=fopen(argv[2],"w");//判断文件是否成功打开if(fp==NULL||fq==NULL){perror("fopen error");return -1;}//定义字符串数组char str[50];//循环将一个文件内容写入另一个文件while(1){//调用fread函数,成功返回值为项数,失败返回非项数//一个字节一个字节的读取文件,项数为字符串长度-1int res=fread(str,sizeof(char),sizeof(str)-1,fp);//字符串最后一个位置手动存放空格str[res]='\0';//如果读取失败跳出循环if(res<=0)break;//写入新文件fwrite(str,sizeof(char),res,fq);}fclose(fp);fclose(fq);return 0; }
运行结果如图所示:
diff指令是比较两个文件是否相等 失败返回不相等的内容;
二、使用fgets获取当前文件的总行数
代码如下:
#include <myhead.h> int main(int argc, const char *argv[]) {FILE* fp=fopen(argv[1],"r");if(fp==NULL){perror("fopen error");return -1;}//字符串数组长度足够大 使n只统计换行个数char str[1024];int n=0;while(1){//接受fgets函数返回值char *res=fgets(str,sizeof(str),fp);//如果返回值为null,读取完毕if(res==NULL){printf("读取完毕,该文件共有%d行\n",n);break;}//行数加1n++;}fclose(fp);return 0; }
运行结果如图所示:
三、向文件中每一秒打印当前系统时间
代码如下:
#include <myhead.h> #include <time.h> //获取文件总行数 int count_line(int n) {FILE* fq=fopen("time.txt","r");char ch=0;while(1){//通过fgetc函数获取文件每个字符ch=fgetc(fq);if(ch==EOF)break;//如果字符是空格行数加一if(ch==10)n++;}return n;fclose(fq); } int main(int argc, const char *argv[]) {//以追加的形式打开文件FILE* fp=fopen("time.txt","a+");//手动刷新缓存区fflush(fp);int n=1;//显示当前文件总行数//多次调用函数,都在文件结尾追加行数n=count_line(n);while(1){//调用时间函数,获取当前时间time_t sys_time=time(NULL);//转换获取时间的格式struct tm* curr_time=localtime(&sys_time);//文件写入当前时间fprintf(fp,"%d、%4d年%2d月%2d日 %2d:%2d:%2d\n",\n,curr_time->tm_year+1900,curr_time->tm_mon+1,\curr_time->tm_mday,curr_time->tm_hour,curr_time->tm_min,\curr_time->tm_sec);//刷新缓存区,立即将时间写入文件fflush(fp);//行数加1n++;//等待1秒sleep(1);}fclose(fp);return 0; }
运行结果如图所示: