2. 合併:將每段臨時檔案依次讀取,然後寫入到要合併成的新檔案
1. 檔案開啟後記得要關閉
2. 對檔案開啟的狀態進行判斷,處理異常
3. fgets函式會獲取行尾的\n,必要時進行相關處理,fputs輸入字串時不會自動新增\n
4. 對最後一塊的長度進行特殊處理,因為它不一定等於每一塊的長度
5. 對操作的分割合併的檔案使用二進位制的模式進行開啟
6. 注意feof函式的使用,在檔案指標指向eof時,下一次讀取feof才會返回1
分割檔案#define _crt_secure_no_warnings
#include
#include
#include
#define n 6 // 定義分割塊數
void mainx()
fseek(fsrc, 0, seek_end);
int flen = ftell(fsrc); // 檔案長度
//printf("檔案長度:%d\n", flen);
int blocklen = flen / n; // 每一塊的長度
//printf("blocklen:%d\n", blocklen);
file *ftmp; // 臨時檔案,
for (int i = 0; i < n; i++) // 按塊分割
fputs(tdir, div); // 寫入檔名
fputc('\n',div);
int offset = i*blocklen; //計算偏移量
fseek(fsrc, offset, seek_set);
intcount = 0; //統計寫入ftmp的數量
if (i == n - 1) blocklen = flen - blocklen*(n - 1); //最後一塊的長度
while (count
count++;
}printf("count:%d\n", count);
fclose(ftmp);
}fclose(fsrc);
fclose(div);
system("pause");
}
合併檔案#define _crt_secure_no_warnings
#include
#include
#include
void main()
char tempname[60];
file *tempfile;
// 迴圈讀出temp檔案路徑,並進行檔案的合併
while (fgets(tempname, 60, div)) // fgets讀取到字串時返回非0,否則返回0
// feof判斷檔案結尾
// 當檔案內部的位置指標指向檔案結束時,並不會立即設定file結構中的檔案結束標識,
// 只有再執行一次讀檔案操作,才會設定結束標誌,此後呼叫feof()才會返回為真。
// 問題**
//while (!feof(tempfile)) // 問題**,每次合併多寫入乙個eof(-1)
//printf("正在合併%s到新檔案\n",tempname);
// 修正後的**
int ch = fgetc(tempfile);//在用feof前先讀取乙個字元
//判斷你上面讀取的ch是否為結束符,feof在讀取到eof才會返回1,
//即若ch為eof,則while迴圈不會進入,而當ch為eof的前一次讀取時,while迴圈仍會繼續。
while (!feof(tempfile))
fclose(tempfile);
}fclose(fdest);
fclose(div);
system("pause");
}
效果圖
c語言學習筆記之檔案操作
1 static 和extern使用 1 修飾區域性變數 static修飾區域性變數特點 延長區域性變數的生命週期 extern不能修飾區域性變數 2 修飾全域性變數 static修飾全域性變數 是乙個內部變數,只能在本檔案使用。extern修飾全域性變數 是乙個外部變數,可以在本檔案和其他檔案使用...
C語言學習筆記之檔案的寫入
程式開頭需要建立乙個指向檔案型別的指標 file fp fopen 函式 fp fopen filename,w 當fopen返回值為null時,表明開啟檔案失敗,或者是未能成功建立檔案。因此可使用該函式的返回值來判斷是否成功建立檔案。fclose 檔案指標 fclose fp 當檔案順利關閉時,f...
C語言學習筆記之輸入與輸出
單個字元 c 字串 s ascii表對應的值 ascii表原圖 常用的對應關係 a z 65 90 a z 97 122 0 9 48 57 因此,字元和整數沒有本質的區別。char變數在記憶體中儲存的是字元對應的ascii值。include intmain 強制型別轉換 自動型別轉換 無論是強制轉...