zoukankan      html  css  js  c++  java
  • 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
    ");
    10         return -1;
    11     }
    12 
    13     //以读写的方式创建一个不存在的文件
    14     FILE *dstFd = fopen("./save.txt","w+");
    15     if(NULL == dstFd)
    16     {
    17         printf("open save file failed
    ");
    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
    ");
    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
    ");
    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
    ");
    47         return -1;
    48     }
    49 
    50     //关闭文件和释放内存空间
    51     fclose(srcFd);
    52     fclose(dstFd);
    53 
    54     free(dataBuf);
    55 
    56     return 0;    
    57 }
  • 相关阅读:
    div常用设置
    Chrome-Charset——Chrome最新版右键工具中的编码修改功能没有了的解决工具
    PHP数据访问(面向对象方式:mysqli类)
    JSON
    jQuery
    jQuery事件
    会话保持
    查询的例子,房屋租赁
    PHP CRUD
    批量删除
  • 原文地址:https://www.cnblogs.com/Older-Driver-of-Newer/p/6258992.html
Copyright © 2011-2022 走看看