<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                文件的復制是常用的功能,要求寫一段代碼,讓用戶輸入要復制的文件以及新建的文件,然后對文件進行復制。能夠復制的文件包括文本文件和二進制文件,你可以復制1G的電影,也可以復制1Byte的txt文檔。 實現文件復制的主要思路是:開辟一個緩沖區,不斷從原文件中讀取內容到緩沖區,每讀取完一次就將緩沖區中的內容寫入到新建的文件,直到把原文件的內容讀取完。 這里有兩個關鍵的問題需要解決: 1) 開辟多大的緩沖區合適?緩沖區過小會造成讀寫次數的增加,過大也不能明顯提高效率。目前大部分磁盤的扇區都是4K對齊的,如果讀寫的數據不是4K的整數倍,就會跨扇區讀取,降低效率,所以我們開辟4K的緩沖區。 2) 緩沖區中的數據是沒有結束標志的,如果緩沖區填充不滿,如何確定寫入的字節數?最好的辦法就是每次讀取都能返回讀取到的字節數。 fread() 的原型為: ~~~ size_t fread ( void *ptr, size_t size, size_t count, FILE *fp ); ~~~ 它返回成功讀寫的塊數,該值小于等于 count。如果我們讓參數 size 等于1,那么返回的就是讀取的字節數。 注意:fopen()一定要以二進制的形式打開文件,不能以文本形式打開,否則系統會對文件進行一些處理,如果是文本文件,像.txt等,可能沒有問題,但如果是其他格式的文件,像.mp4, .rmvb, .jpg等,復制后就會出錯,無法讀取。 ~~~ #include <stdio.h> #include <stdlib.h> int copyFile(char *fileRead, char *fileWrite); int main(){ char fileRead[100]; // 要復制的文件名 char fileWrite[100]; // 復制后的文件名 // 獲取用戶輸入 printf("要復制的文件:"); scanf("%s", fileRead); printf("將文件復制到:"); scanf("%s", fileWrite); // 進行復制操作 if( copyFile(fileRead, fileWrite) ){ printf("恭喜你,文件復制成功!\n"); }else{ printf("文件復制失敗!\n"); } return 0; } /** * 文件復制函數 * @param fileRead 要復制的文件 * @param fileWrite 復制后文件的保存路徑 * @return int 1: 復制成功;2: 復制失敗 **/ int copyFile(char *fileRead, char *fileWrite){ FILE *fpRead; // 指向要復制的文件 FILE *fpWrite; // 指向復制后的文件 int bufferLen = 1024*4; // 緩沖區長度 char *buffer = (char*)malloc(bufferLen); // 開辟緩存 int readCount; // 實際讀取的字節數 if( (fpRead=fopen(fileRead, "rb")) == NULL || (fpWrite=fopen(fileWrite, "wb")) == NULL ){ printf("Cannot open file, press any key to exit!\n"); getch(); exit(1); } // 不斷從fileRead讀取內容,放在緩沖區,再將緩沖區的內容寫入fileWrite while( (readCount=fread(buffer, 1, bufferLen, fpRead)) > 0 ){ fwrite(buffer, readCount, 1, fpWrite); } free(buffer); fclose(fpRead); fclose(fpWrite); return 1; } ~~~ 運行結果: ~~~ 要復制的文件:d://1.mp4 將文件復制到:d://2.mp4 恭喜你,文件復制成功! ~~~ 如果文件不存在,會給出提示,并終止程序: ~~~ 要復制的文件:d://123.mp4 將文件復制到:d://333.mp4 d://cyuyan.txt: No such file or directory ~~~ 通過fread()函數,每次從 fileRead 文件中讀取 bufferLen 個字節,放到緩沖區,再通過fwrite()函數將緩沖區的內容寫入fileWrite文件。 正常情況下,每次會讀取bufferLen個字節,即readCount=bufferLen;如果文件大小不足bufferLen個字節,或者讀取到文件末尾,實際讀取到的字節就會小于bufferLen,即readCount<bufferLen。所以通過fwrite()寫入文件時,應該以readCount為準。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看