如何用c语言读取一个已知txt文件的数据然后输出到另一个文件,卡到这一步,接下来怎么弄?
可以通过fprintf和fgetc这两个函数比较简单的执行文件复制操作,修改如下:
#include <stdio.h>
#include <stdlib.h>
int main(void){
FILE * fp;
int filelen = 0;
int i = 0;
char * buf;
//打开原文件
if((fp=fopen("f:\\1.txt","r"))==NULL){
printf("can't open file!\n'");
exit(0);
}
//打开或创建备份文件
FILE * outfp = fopen("f:\\1bank.txt","w+");
if(outfp==NULL){
printf("open file or create file error!\n ");
exit(0);
}
char ch;
//执行复制操作
while((ch=fgetc(fp))!=EOF){
fprintf(outfp,"%c",ch);
}
// fseek(fp,0,SEEK_END);
// filelen=ftell(fp);
// rewind(fp);
// buf= (char *)malloc (filelen+1);
// for(i=0;i<filelen+1;i++){
// buf[i] = 0;
// }
//
// fread(buf,filelen,1,fp);
fclose(fp);
fclose(outfp);
return 0;
}
read之后可以将文件内容读入到程序中某个buffer数组(就是一个用于存放数据的char数组),然后再将buffer内容写入新的文件即可
可以单次写入全部内容,也可以每次读一部分分步写入.
参考fread和fwrite的用法
你这是文件读取部分,只需要再定义一个FILE * fp2,然后fopen打开需要写入的文件,将fread读取的数组用fwrite写入新文件就行了
你这个文件的打开方式不对啊,w是写文件,读文件用r
你把源代码贴出来,不要用图片,可以给改一改
从两个层面说一下:
功能方面:
采用fread方式从一个文件A读取内容后放在本地buff中,再从本地buff中使用fwrite写入对应文件B的fd中。相关接口是:
fopen();fread(); fwrite();
性能方面:
假设我们读取的文件有1个g,那么如何快速的将文件内容迁移呢?
解决这个问题首先我们要了解一下文件的读取操作是如何开展的,当你调用了fread后,操作系统会进入内核态将磁盘上的内容读取到内核空间,然后将内核空间里保存的内容放入用户空间,一共是2次拷贝过程,同理,fwirte也是。这就是效率慢的原因了。
如何解决?
linux 2.7.3以上的内核版本提供了一个借口 readfile(),具体可自行百度。