2016-02-25 71 views
1

我正在編寫一個將文本文件轉換爲二進制文件的C程序,反之亦然。我的第一個問題是關於以「w」模式打開文件。是否需要檢查輸出文件是否正確打開?以寫入模式在C中打開文件

FILE *output; 
output = fopen("output.bin", "w"); 
if(output == NULL) 
    { printf("Error opening output file\n");} 

基本上我的問題是,是否輸出將永遠實際上== NULL。因爲如果打開輸出時出現問題,它不會創建一個名爲「output.bin」的新文件嗎?

另外我的另一個問題是字符如何實際保存在二進制文件中。我知道我應該將每個字符保存爲一個無符號字符,因此它可以具有0到255之間的值,然後我應該將該字符寫入輸出文件。如果有人能幫助我或指出我朝着正確的方向,那麼發生這種事情的實際邏輯路徑是沒有意義的,我將不勝感激!

+0

什麼意思是「將文本文件轉換爲二進制文件,反之亦然」? – e0k

+0

「是否需要檢查輸出文件是否正確打開」。是的,你需要檢查返回值。至少這是一個好習慣。當然,開放可能會失敗,原因很多。例如,沒有權限在當前目錄中創建文件。或文件已存在但不可寫入。 – kaylum

+0

我應該有二進制文件保存L字節(字符串)和4字節(整數),其中L =字符串的長度。 1字節是L.的值我希望我能解釋更多,但我仍然試圖瞭解如何存儲和表示二進制文件 – John

回答

3

是的,在寫入模式下打開文件可能仍然失敗。以下是一些可能的原因,但當然不是唯一的原因:

  • 您沒有創建或更改文件的權限。
  • 該文件是隻讀的,或者它所在的目錄是隻讀的。
  • 該文件將在另一個文件中。 (test/foo如果test是一個文件,而不是一個目錄)
  • 文件系統空間不足或inode(在存儲的inode固定數量的文件系統)
  • 用戶已經達到他們的磁盤空間配額。
  • 該文件將在另一臺計算機上,並且網絡已關閉。
  • 文件名無效 - 例如在Windows上爲C:/???*\\\\foo
  • 文件名太長。
相關問題