|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #define BUFFER_SIZE (512) * (1024) //缓冲区大小,设为512KB
- //获取文件大小
- int GetFileSize(FILE *fp);
- //复制文件
- int CopyFile(const char szFileNameSrc[],const char szFileNamedest[]);
- int main(int argc, char* argv[])
- {
- char szFileNameSrc[48] = {0};
- char szFileNameDest[48] = {0};
- FILE * fp;
- fp = fopen("1.rmvb", "rb");
- printf("%d\r\n", GetFileSize(fp) / (1024 * 1024));
- printf("请输入要被复制的文件所在路径及名称:");
- scanf("%47s", szFileNameSrc);
- printf("请输入复制后文件的所在路径及名称:");
- scanf("%47s", szFileNameDest);
- if (CopyFile(szFileNameSrc, szFileNameDest))
- {
- printf("复制成功!\r\n");
- }
- else
- {
- printf("复制失败!\r\n");
- }
- return 0;
- }
- int CopyFile(const char szFileNameSrc[],const char szFileNamedest[])
- {
- FILE *fp1 = NULL;
- FILE *fp2 = NULL;
- char szBuffer[BUFFER_SIZE] = {0}; //设置缓冲区
- int nFileSize = 0; //文件大小
- int nReadSize = 0; //读取到的大小
- int nFlag = 1; //标记是否复制成功
- fp1 = fopen(szFileNameSrc, "rb");
- fp2 = fopen(szFileNamedest, "w+");
- if ((NULL == fp1) || (NULL == fp2))
- {
- nFlag = 0;
- goto END_PROC;
- }
- nFileSize = GetFileSize(fp1);
- while (nFileSize > 0)
- {
- nReadSize = fread(szBuffer, 1, BUFFER_SIZE, fp1);
- fwrite(szBuffer, nReadSize, 1, fp2);
- nFileSize -= BUFFER_SIZE;
- }
- END_PROC:
- if (fp1 != NULL)
- {
- fclose(fp1);
- fp1 = NULL;
- }
- if (fp2 != NULL)
- {
- fclose(fp2);
- fp2 = NULL;
- }
- if (nFlag = 0)
- {
- return 0;
- }
- return 1;
- }
- int GetFileSize(FILE *fp)
- {
- int nCurPos = 0; //文件当前的位置
- int nSize = 0; //文件大小
-
- nCurPos = ftell(fp);
- fseek(fp, 0, SEEK_END);
- nSize = ftell(fp);
- fseek(fp, nCurPos, SEEK_SET);
-
- return nSize;
- }
复制代码
代码如上,复制后目标文件内容和源文件完全一致,但是大小会变大了一点点,也就是说源文件的格式已被破坏,如果是音乐文件或电影文件就会无法播放,不知道什么原因,求指教。。。。
|
|