鱼C论坛

 找回密码
 立即注册
查看: 4280|回复: 0

C语言文件复制的问题

[复制链接]
发表于 2012-10-13 00:10:33 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>

  4. #define BUFFER_SIZE (512) * (1024)  //缓冲区大小,设为512KB

  5. //获取文件大小
  6. int GetFileSize(FILE *fp);
  7. //复制文件
  8. int CopyFile(const char szFileNameSrc[],const char szFileNamedest[]);

  9. int main(int argc, char* argv[])
  10. {
  11.     char szFileNameSrc[48] = {0};
  12.     char szFileNameDest[48] = {0};

  13.     FILE * fp;
  14.     fp = fopen("1.rmvb", "rb");

  15.     printf("%d\r\n", GetFileSize(fp) / (1024 * 1024));

  16.     printf("请输入要被复制的文件所在路径及名称:");
  17.     scanf("%47s", szFileNameSrc);
  18.     printf("请输入复制后文件的所在路径及名称:");
  19.     scanf("%47s", szFileNameDest);

  20.     if (CopyFile(szFileNameSrc, szFileNameDest))
  21.     {
  22.         printf("复制成功!\r\n");
  23.     }
  24.     else
  25.     {
  26.         printf("复制失败!\r\n");
  27.     }

  28.     return 0;
  29. }

  30. int CopyFile(const char szFileNameSrc[],const char szFileNamedest[])
  31. {
  32.     FILE *fp1 = NULL;
  33.     FILE *fp2 = NULL;
  34.     char szBuffer[BUFFER_SIZE] = {0};   //设置缓冲区
  35.     int nFileSize = 0;  //文件大小
  36.     int nReadSize = 0;  //读取到的大小
  37.     int nFlag = 1;  //标记是否复制成功

  38.     fp1 = fopen(szFileNameSrc, "rb");
  39.     fp2 = fopen(szFileNamedest, "w+");
  40.     if ((NULL == fp1) || (NULL == fp2))
  41.     {
  42.         nFlag = 0;
  43.         goto END_PROC;
  44.     }

  45.     nFileSize = GetFileSize(fp1);
  46.     while (nFileSize > 0)
  47.     {
  48.         nReadSize = fread(szBuffer, 1, BUFFER_SIZE, fp1);
  49.         fwrite(szBuffer, nReadSize, 1, fp2);

  50.         nFileSize -= BUFFER_SIZE;
  51.     }

  52. END_PROC:
  53.     if (fp1 != NULL)
  54.     {
  55.         fclose(fp1);
  56.         fp1 = NULL;
  57.     }

  58.     if (fp2 != NULL)
  59.     {
  60.         fclose(fp2);
  61.         fp2 = NULL;
  62.     }

  63.     if (nFlag = 0)
  64.     {
  65.         return 0;
  66.     }

  67.     return 1;
  68. }

  69. int GetFileSize(FILE *fp)
  70. {
  71.     int nCurPos = 0;    //文件当前的位置
  72.     int nSize = 0;  //文件大小
  73.    
  74.     nCurPos = ftell(fp);
  75.     fseek(fp, 0, SEEK_END);
  76.     nSize = ftell(fp);
  77.     fseek(fp, nCurPos, SEEK_SET);
  78.    
  79.     return nSize;
  80. }
复制代码


代码如上,复制后目标文件内容和源文件完全一致,但是大小会变大了一点点,也就是说源文件的格式已被破坏,如果是音乐文件或电影文件就会无法播放,不知道什么原因,求指教。。。。
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-11-15 14:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表