next up previous contents
Next: fseek 函式 Up: 檔案讀寫 Previous: 讀取文字檔   Contents   DYWANG_HOME

二進位檔讀寫

  1. 二進位檔案讀寫函式
    1. 讀取:size_of_elements 是一次讀取的大小,number_of_elements 是讀取的次數。
      size_t fread(void *ptr, size_t size_of_elements, 
                   size_t number_of_elements, FILE *a_file);
      
    2. 寫入:size_of_elements 是一次寫入的大小,number_of_elements 是寫入的次數。
      size_t fwrite(const void *ptr, size_t size_of_elements, 
                   size_t number_of_elements, FILE *a_file);
      
  2. 範例:fread 讀取二進位檔,直到回傳值 0 (讀不到資料,也就是檔案結束),再用 fwrite 寫到另一個檔案。
    [dywang@dyw219 zzz]$ vim fileio4.c
    [dywang@dyw219 zzz]$ cat fileio4.c
    #include <stdio.h>
    
    int main( int argc, char *argv[] ) {
    	FILE *fp1, *fp2;
    	char ch;
    	
    	fp1 = fopen( argv[1], "rb" );
    	fp2 = fopen( argv[2], "wb" );
    	if( fp1 != NULL) {
    		while (	fread( &ch, sizeof(ch), 1, fp1) != 0 )
    			fwrite( &ch, sizeof(ch), 1, fp2 );
    	} 
    	else {
    		printf("File %s does not exist.\n", argv[1]);
    	}
    	fclose(fp1);
    	fclose(fp2);
    
    	return 0;
    }
    
  3. 編譯
    [dywang@dyw219 zzz]$ gcc -o fileio4 fileio4.c
    
  4. 執行結果:以二進位方式讀取檔案 fileio1,再寫入 fileio1.bak。
    [dywang@dyw219 zzz]$ ./fileio4 fileio1 fileio1.bak
    
  5. diff 比對 fileio1 與 fileio1.bak 兩個檔,結果完全一樣。
    [dywang@dyw219 zzz]$ diff fileio1 fileio1.bak
    



2020-01-02