比較兩文件(流)內容是否相同(很經典的代碼)

// --------------------------------------------------------------------------
//  函數: get_file_size 獲得文件大小
// --------------------------------------------------------------------------
unsigned int get_file_size(FILE *fp)
{   
    unsignfile_size;
 
    fseek(fp, 0L, SEEK_END);//從文件尾開始 0L
    file_size = ftell(fp);  //file_size獲得文件的字節數
    rewind(fp);
    return file_size;
}



// --------------------------------------------------------------------------
// 函數: compare_file  比較文件不相等返回FALSE(0)
// --------------------------------------------------------------------------
bool compare_file(FILE *fp1, FILE *fp2)
{   
    unsigned int file_size1, file_size2;
    unsigned char buff_f1, buff_f2;
    bool  result = TRUE;
 
    file_size1 = get_file_size(fp1); //獲得fp1文件的大小
    file_size2 = get_file_size(fp2); //獲得fp2文件的大小   
    if (file_size1 != file_size2) 
    {
         return FALSE;
    }   
    while(1)  //進入死循環直到從下面跳出爲止
    {
         if (feof(fp1) || feof(fp2))//到文件尾(EOF)就跳出循環
         {
                break;
         }   
         fread((void *)&buff_f1, 1, 1, fp1);
         fread((void *)&buff_f2, 1, 1, fp2);
         if (buff_f1 != buff_f2)
         {
               result = FALSE;
               break;
         }
   }
   rewind(fp1);   
   rewind(fp2);   
   return result;
} //end of compare_file

關於rewind函數百度解釋以下
//函數名: rewind
//功 能: 將文件內部的位置指針從新指向一個流(數據流/文件)的開頭
//注意:不是文件指針而是文件內部的位置指針,
//隨着對文件的讀寫文件的位置指針(指向當前讀寫字節)向後移動。
//而文件指針是指向整個文件,若是不從新賦值文件指針不會改變。
//void rewind(FILE *stream);
//頭文件:stdio.h
//返回值:無
以上兩個函數能夠作到對兩個文件(數據流)數據的驗證,驗證其內容是否相等
相關文章
相關標籤/搜索