首页 > 代码库 > Linux中进行单文件内容的复制
Linux中进行单文件内容的复制
文件内容复制的常规方法:
- 开辟一段空间,不断读取文件的内容并写入另一文件当中,这种方法好在安全,一般在类型允许的最大范围内是安全的,缺点就是复制内容的时间长
- 一次性复制文件的内容,这种方法必须首先获取当前被复制的文件内容的大小,然后一次性开辟与文件内容大小相同的内存空间,通常为了安全,都必须让大小加1。
读取文件内容的步骤
- 打开被复制文件(open/fopen)
- 读取文件内容(read/fread)--->当使用系统IO(open这一类)的时候可以直接读取内容,但当使用标准IO(fopen这一类)的时候,必须进行下一步
- 标准IO读取文件内容的时候,必须先获取到文件内容的大小,通常使用fseek和ftell来获取,系统IO则不用
- 写入另一份文件中进行保存(write/fwrite)
- 关闭打开的文件
具体的操作(考虑到移植性,本文章使用标准IO进行操作)
- 使用fopen打开被复制的文件和创建一个保存的文件,并判断是否打开或创建成功
- 使用fseek和ftell来获取当前复制文件的内容大小fileSize;
- 开辟一个内存空间,建议使用动态开辟的方法,比如mallco,calloc,new等
- 使用fread读取被复制文件的内容,使用fwrite写进到保存文件中
- 使用fclose关闭上述的两个文件
代码显示
1 #include <stdio.h> 2 3 int main(int argc,char *argv) 4 { 5 //以只读的方式打开被复制的文件 6 FILE *srcFd = fopen("./source.txt","r"); 7 if(NULL == srcFd) 8 { 9 printf("open source file failed\n"); 10 return -1; 11 } 12 13 //以读写的方式创建一个不存在的文件 14 FILE *dstFd = fopen("./save.txt","w+"); 15 if(NULL == dstFd) 16 { 17 printf("open save file failed\n"); 18 return -1; 19 } 20 21 //进行获取文件大小的操作 22 fseek(srcFd,0,SEEK_END); //将光标移动到文件末尾 23 long fileSize = ftell(srcFd); //获取文件的大小 24 fseek(srcFd,0,SEEK_SET); //将光标恢复到文件的开头 25 26 //开辟一个新空间(动态开辟) 27 char *dataBuf = (char *)calloc(1,fileSize+1); 28 if(NULL == dataBuf) 29 { 30 printf("calloc a memory failed\n"); 31 return -1; 32 } 33 34 //读取文件的内容 35 long retSize = fread(dataBuf,1,fileSize,srcFd); 36 if(retSize != fileSize) 37 { 38 printf("read file context failed\n"); 39 return -1; 40 } 41 42 //写入保存文件中 43 retSize = fwrite(dataBuf,1,fileSize,dstFd); 44 if(retSize != fileSize) 45 { 46 printf("write context in file failed\n"); 47 return -1; 48 } 49 50 //关闭文件和释放内存空间 51 fclose(srcFd); 52 fclose(dstFd); 53 54 free(dataBuf); 55 56 return 0; 57 }
Linux中进行单文件内容的复制
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。