當前位置:編程學習大全網 - 編程語言 - 誰能幫我用c語言寫壹個文件復制程序,謝謝。

誰能幫我用c語言寫壹個文件復制程序,謝謝。

#include

/* * * * * * * * * * * * * * * * * * *

* CopyFile: 此函數用於復制指定的文件到指定的位置,

* 功能算是Windows下的 copy, 或linux下的 cp.

* 這裏的實現用了 fread() 和 fwrite(), 二進制流的形式讀寫

* 返回值: 非負數: 復制的字節數.

* 小於0的數: 請檢查文件名是否正確輸入, 是否合法.

* * * * * * * * * * * * * * * * * * */

long CopyFile(const char* file_1, const char * file_2)

{

FILE *pfRead = fopen(file_1, "rb");// pfRead用作復制源.

FILE *pfWrite = fopen(file_2, "wb");// pfWrite對應復制出來的新文件.

if (NULL == pfRead || NULL == pfWrite)

{

fclose(pfRead);

fclose(pfWrite);

return -1;

}

long bytesCount = 0;//統計復制的字節數. long最大可以表示不超過2GB的文件

/* 因為C沒有byte類型,所以這裏用char替代

* 貌似對大多數機器來說,char都是 單字節

*/

int arrLen = 1024; //這個是緩存數組的元素大小

char bufArr[arrLen]; //這個是 "緩存", 緩存的字節數是 elementSize * arrLen.

int copiedLen; //這個變量用來記錄fread函數每壹次真正讀取的元素數

int elementSize = sizeof(bufArr[0]);

do

{

copiedLen = 0;

copiedLen = fread(bufArr, elementSize, arrLen, pfRead);

fwrite(bufArr, elementSize, copiedLen, pfWrite);

bytesCount += copiedLen * elementSize;

} while(copiedLen == arrLen);

//關閉流.

fclose(pfRead);

fclose(pfWrite);

return bytesCount;

}

/* 此程序從命令行參數 獲取文件名(路徑):

* C:\>application_name file1_name file2_name

* Example:

* C:\>cfilecopy.exe e:\abc.txt f:\abc2.txt

* abc.txt必須存在,abc2.txt可以不存在,會自動創建文件.

* 如果abc2.txt已存在,會被覆蓋掉.

* (友情提示:註意保存重要的文件, 別被"蓋"了!)

* */

int main(int argc, char *argv[])

{

if(argc == 3)

{

char * f1 = argv[1];

char * f2 = argv[2];

printf("Copy File 1: %s\n To File 2: %s\n", f1, f2);

puts("Copying......");

long bytesCount = CopyFile(f1, f2);

if (bytesCount < 0)

{

puts("Fail to copy.");

}

else

{

printf(" %ld bytes wrote into %s.\n", bytesCount, f2);

}

}

else

{

puts("parameters error");

}

//getchar();

return 0;

}

  • 上一篇:如何用C語言編程出可視化界面?
  • 下一篇:2022年小班教育教學計劃(精選5篇)
  • copyright 2024編程學習大全網