在上一次的代碼中,不管目标檔案是否存在我們都會複制一遍,這就可能會破壞已有的檔案
/*
本程式所實作的功能為 【**.exe srcFile desFile】 ,就是将srcFile 拷貝一份到desfile,
是以在運作程式時必須在後面添加兩個參數,第一個是已經存在的檔案的路徑,另一個是需要
複制到的路徑。
本程式主要是利用檔案操作函數中的 fgetc() 函數 與 fputc() 函數。
函數說明:
fgetc(FILE *fp):
從流中讀取一個字元,同時沒取完一個字元fp 指針會自動指向下一個字元。
當讀取錯誤時會傳回EOF。可以通過傳回值判斷目前檔案是否讀完。
fputc(char ch, FILE *fp):
向流中輸入一個字元,與fgetc 相似,在每寫入一個後fp 指向下一個,等待繼續輸入,或者
流關閉
在函數中我們還需要用到 fopen(char * fileName, char *type),第一個參數就是我們所需要的檔案路徑,
第二個參數就是讀取的方式。讀取方式如下:
r:隻讀方式打開一個文本,隻允許讀資料
w:隻寫打開或建立一個文本檔案,隻允許寫資料
a:追加打開一個文本檔案,并在檔案末尾寫資料
rb:隻讀打開一個二進制檔案,隻讀
wb:隻寫打開,或建立一個二進制檔案,隻允許寫資料
ab:追加打開一個二進制檔案,并在檔案末尾寫資料
r+:讀寫打開一個文本檔案,允許寫和讀
w+:讀寫打開或建立一個文本檔案,可以讀和寫
a+:讀寫打開一個文本檔案,允許讀,或在檔案末尾追加資料
rb+:讀寫打開一個二進制檔案,允許讀和寫
wb+:讀寫打開或建立一個二進制檔案,允許讀和寫
ab+:讀寫打開一個二進制檔案,允許讀,或在檔案末尾追加資料
還有第二個函數fclose(FILE *fp) ,也就是關閉檔案流,這個很重要
後面添加:
函數原型: int access(const char *filename, int mode);
所屬頭檔案:#include <io.h>
filename:可以填寫檔案夾路徑或者檔案路徑
mode: 0 (F_OK) 隻判斷是否存在
2 (R_OK) 判斷寫入權限
4 (W_OK) 判斷讀取權限
6 (X_OK) 判斷執行權限
在這個程式中我們隻使用用F_OK 檔案是否存在
*/
#include<io.h>// 在這個頭檔案中包含有檢測目前檔案是否存在的函數access(const char *filename, int mode);
#include<stdio.h>// 在這個頭檔案中包含了我們所需要的各個檔案操作函數
int main(int argc, char* argv[])
{
FILE *srcFile , *desFile;//定義兩個檔案指針
if(argc != )// 判斷參數輸入是否滿足要求
{
printf("Please input <%s srcFile desFile>",argv[]);// 這個地方提示使用者程式執行的正确方式
return ;
}
srcFile = fopen(argv[],"rb");//以讀取二進制的方式打開源檔案
if(srcFile == NULL)
{
printf("Source file open failure!!");
printf("Press any key to close!!");
getchar();
return ;
}
if ( !access(argv[],) )
{
printf("%s EXISITS!!",argv[]);
printf("Source file open failure!!");
printf("Press any key to close!!");
getchar();
return ;
}
desFile = fopen(argv[],"wb");//以寫入二進制方式打開目标檔案
if(desFile == NULL)
{
printf("Destination file open failure!!");
printf("Press any key to close!!");
getchar();
return ;
}
/* start copy */
while(!feof(srcFile))// 判斷目前指針的指向是否為EOF
{
putc(getc(srcFile),desFile);
}
fclose(srcFile);
fclose(desFile);
return ;
}
/* 這個程式如果想要更加的人性話,可以在使用者運作函數後,輸入源檔案和目标檔案,同時還應具備
檢查目标檔案是否存在的問題,不然在複制檔案時,可能導緻其他檔案受損。
*/
// 已經加入判斷檔案是否存在