利用标准IO函数接口实现文件拷贝
本文发布于59 天前,其中的信息可能已经过时,如有错误请发送邮件到supper@vcclient.xyz
/*************************************************************************
 * 
 *   func name      :  
 *   function       :  利用标准IO函数接口实现文件拷贝,把本地磁盘的文件A中的数据完整的拷贝到另一个文本B中,
 *                     如果文本B不存在则创建,要求文本A的名称和文本B的名称通过命令行传递,并进行验证是否正确。
 *   argument       :  None         
 *   return value   :  None
 *   authof         :  wzy
 *   data           :  2026/4/16
 *   note           :  一个一个字符的拷贝:以时间换空间
 * 
 ************************************************************************/
#if 0

int main(int argc, char const *argv[])
{
    if (argc != 3)
    {
        printf("errof");
        exit(1);
    }

    FILE* FileA = fopen(argv[1],"rb");
    if (NULL == FileA)
    {
        perror("errorA");
        exit(1);
    }

    FILE* FileB = fopen(argv[2],"wb+");
    if (NULL == FileB)
    {
        perror("errorA");
        exit(1);
    }

    int ch;
    while((ch=fgetc(FileA))!=EOF)
    {
        fputc(ch,FileB);
    }

    fclose(FileA);
    fclose(FileB);

    return 0;
}
#endif

/*************************************************************************
 * 
 *   func name      :  
 *   function       :  利用标准IO函数接口实现文件拷贝,把本地磁盘的文件A中的数据完整的拷贝到另一个文本B中,
 *                     如果文本B不存在则创建,要求文本A的名称和文本B的名称通过命令行传递,并进行验证是否正确。
 *   argument       :  None         
 *   return value   :  None
 *   authof         :  wzy
 *   data           :  2026/4/16
 *   note           :  以数据块拷贝:以空间换时间
 * 
 ************************************************************************/

#if 0

#define BUFFERSIZE 512

int main(int argc, char const *argv[])
{
    int A_size = 0; //记录待拷贝文件的大小
    int loop_cnt = 0; //记录循环次数
    int remainder = 0; //记录余数
    if (argc != 3)
    {
        printf("errof");
        exit(1);
    }

    //2.打开待拷贝文件和目标文件
    FILE* FileA = fopen(argv[1],"rb");
    if (NULL == FileA)
    {
        perror("errorA");
        exit(1);
    }

    FILE* FileB = fopen(argv[2],"wb+");
    if (NULL == FileB)
    {
        perror("errorA");
        exit(1);
    }

    //3.为了提高程序的运行效率,采用空间换时间的思想,定义数据缓冲区来存储文件数据
    char data_buffer[BUFFERSIZE] = {0};

    fseek(FileA,0,SEEK_END);//偏移待拷贝文件的光标位置到末尾
    A_size = ftell(FileA);//记录待拷贝文件的大小
    fseek(FileA,0,SEEK_SET);//偏移待拷贝文件的光标位置到开头

    printf("A_size = %d\n",A_size);

    //4.计算需要读取数据的次数,循环写入到目标文件即可
    loop_cnt = A_size / BUFFERSIZE;//记录需要循环的次数
    remainder = A_size % BUFFERSIZE;

    if (loop_cnt > 1)
    {
        while(loop_cnt--)
        {
            //读取待拷贝文件的数据
            fread(data_buffer,BUFFERSIZE,1,FileA);
            //向目标文件中写入数据块
            fwrite(data_buffer,BUFFERSIZE,1,FileB);
        }

    }
    if(remainder>0)
    {
        //提前清空数据缓冲区
        bzero(data_buffer,BUFFERSIZE);
        //读取待拷贝文件的数据
        fread(data_buffer,remainder,1,FileA);
        //向目标文件中写入数据块
        fwrite(data_buffer,remainder,1,FileB);
    }

    //验证拷贝是否完成,统计目标文件的数量
    printf("B_size = %ld\n",ftell(FileB));

    fclose(FileA);
    fclose(FileB);

    return 0;
}
#endif
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇