一、使用fscanf实现,将一个文件中的数据打印到终端上(类似于cat一个文件)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <dirent.h>
#include <errno.h>
int main(int argc, const char *argv[])
{
FILE *fp=fopen("1.txt","r");
if(fp==NULL){
perror("fopen");
return -1;
}
char buf;
//循环获取文件中的数据,直到文件读取完毕,退出循环
//当fscanf返回值为-1时,退出循环
while(fscanf(fp,"%c",&buf)!=-1){
printf("%c",buf);
buf=0;
}
//关闭
fclose(fp);
return 0;
}
注意:%d %s %f不会获取空格和换行,%c可以获取空格和换行字符;文章来源地址https://www.toymoban.com/news/detail-838645.html
二、使用fputc、fgetc实现文件拷贝(一次拷贝一个字符)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <dirent.h>
#include <errno.h>
int main(int argc, const char *argv[])
{
//以读的方式打开源文件
FILE *fpr=fopen(argv[1],"r");
//以写的方式打开目标文件
FILE *fpw=fopen("copy.txt","w");
if(fpr==NULL|fpw==NULL){
perror("open");
return -1;
}
char c=0;
while((c=fgetc(fpr))!=-1){
fputc(c,fpw);
}
fclose(fpr);
fclose(fpw);
return 0;
}
三、使用fgets、fputs实现文件拷贝(一次拷贝一个buf大小的内容)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <dirent.h>
#include <errno.h>
#include <pthread.h>
int main(int argc, const char *argv[])
{
FILE *fpr=fopen("1.txt","r");
FILE *fpw=fopen("2.txt","w");
if(fpr==NULL || fpw==NULL){
perror("open");
return -1;
}
char buf[32]="0";
while(fgets(buf,sizeof(buf),fpr)!=NULL){
fputs(buf,fpw);
}
fclose(fpr);
fclose(fpw);
return 0;
}
四、使用fread、fwrite实现拷贝文件
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <dirent.h>
#include <errno.h>
#include <pthread.h>
int main(int argc, const char *argv[])
{
FILE *fpr=fopen("1.txt","r");
FILE *fpw=fopen("3.txt","w");
if(fpr==NULL || fpw==NULL){
perror("open");
return -1;
}
char buf[32]="0";
while(1){
//以一个字节为单位读取数据,每次读取sizeof(buf)个
int res=fread(buf,1,sizeof(buf),fpr);
if(res==0)
break;
//写入数据,以一个字节单位,写入实际读取到的数据,res个
fwrite(buf,1,res,fpw);
}
fclose(fpr);
fclose(fpw);
return 0;
}
五、使用read、write实现拷贝文件
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <dirent.h>
#include <errno.h>
#include <pthread.h>
int main(int argc, const char *argv[])
{
int fdr=open("1.txt",O_RDONLY);
int fdw=open("5.txt",O_WRONLY|O_CREAT|O_TRUNC,0666);
if(fdr<0||fdw<0){
perror("open");
return -1;
}
char buf[32]="0";
int res;
/* while(1){
res=read(fdr,buf,sizeof(buf));
if(res==0)
break;
write(fdw,buf,res);
}*/
while((res=read(fdr,buf,sizeof(buf)))>0){
write(fdw,buf,res);
}
close(fdr);
close(fdw);
return 0;
}
文章来源:https://www.toymoban.com/news/detail-838645.html
到了这里,关于IO:实现文件拷贝的各种方法(观察每种函数中的参数和结束条件)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!