2011-04-10 84 views
3

我在想,如何檢查打開的文件是否與fopen一起存在?當用戶選擇名稱不正確的文件時,我想要顯示一些消息。必須是一些簡單的檢查,但我無法解決它。C - 打開無效文件

感謝

回答

2

在PARAM列表:

FILE pFile ; 

則:

pFile = fopen ("myfile.txt","r"); 

if (pFile == NULL) 
printf("No Such File !! "); 
+4

這根本不是一個好的錯誤信息。 「沒有這樣的文件」只是可能的失敗之一。 – Mat 2011-04-10 14:09:38

+0

這是唯一可能的選項,因爲如果文件損壞,他不會像程序那樣加載,但他可以通過字符(或行或更多)讀取其字符char。 – Batman 2011-04-11 07:05:10

+5

不,不是。這可能是文件或路徑上的權限問題。這也可能是一個資源分配錯誤(fopen可以調用'malloc',這可能會失敗)。如果問題可能完全不同,說「沒有這樣的文件」是不好的做法,並且會使調試更加困難。 – Mat 2011-04-11 07:16:10

0

很簡單:返回FILE*指針會null如果文件不存在。

當然這假定您正在以r的讀取模式打開它。

+0

是的,但是如果他沒有適當的權限,例如'NULL'。 – 2011-04-10 14:06:27

+0

因此你需要知道你想要你的代碼做什麼。 – Batman 2011-04-10 14:14:11

+0

那麼古老的「perror」呢? – Jack 2011-04-10 14:23:41

3

fopen失敗時,它返回NULL並設置errno以指示錯誤的類型。

檢查返回值,如果是NULL檢查errno。您可以使用perrorstrerror等功能來顯示有關這些錯誤的簡單消息。

1

爲了使它更加清晰:

f = fopen("some-file-name.ext", "r"); 
if (f == NULL) reporterror(); 

但是,也許你不想使用fopen爲檢查存在和訪問權限。你應該看看stataccess。無論是在C庫可用,使用人

+0

訪問/統計信息+1。 – Duck 2011-04-10 14:35:54

+0

請注意,access和stat不是C(它們是POSIX)。 – Jens 2011-04-10 16:56:07

+0

@Jens - 你說得對。我記得在我工作的每個平臺上都有訪問權限,但它顯然不是標準的。 – Duck 2011-04-15 16:12:12

0

the possible errorsopen

不過,我認爲你將有一個很難找到一種方法來確定一個文件名是無效的。在大多數系統上(Windows除外),任何不太長的字符串都可能有效(模數/被解釋爲路徑分隔符)。