天天看點

CP 之改進

在上一次的代碼中,不管目标檔案是否存在我們都會複制一遍,這就可能會破壞已有的檔案

/*
    本程式所實作的功能為 【**.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 ;
}

/* 這個程式如果想要更加的人性話,可以在使用者運作函數後,輸入源檔案和目标檔案,同時還應具備
    檢查目标檔案是否存在的問題,不然在複制檔案時,可能導緻其他檔案受損。
*/

// 已經加入判斷檔案是否存在
           

繼續閱讀