2011-04-13 45 views
0

我正在使用fopen的參數。我可以做些什麼檢查以確保fopen實際上將字符串轉換爲有效的文件名?如何檢查給定的文件讀取參數是否有效?

+4

不要;試着「打開」它。其他任何事情都會讓你面對潛在的競爭條件。 – geekosaur 2011-04-13 03:30:40

+0

你想確保傳遞給'fopen'的值是'char *'嗎?你在問什麼?你有什麼意思的有效文件名? – Mahesh 2011-04-13 03:30:40

+0

你問的如何驗證文件名參數是一個實際的文件? – Gabe 2011-04-13 03:32:02

回答

7

第一種方法是嘗試打開文件。如果fopen()返回NULL,則出現錯誤。檢查errno變量或函數以找出問題。

試圖預處理文件規範是徒勞無益的。操作系統會爲你做每一項相關的檢查,包括那些你很難做的檢查,比如檢查文件保護ACL等。

+1

這也意味着,即使您認爲您只是通過預先檢查來徹底檢查,操作系統也會再次執行相同的檢查,而且很可能還會進行一些您沒有想到的檢查。 – slezica 2011-04-13 04:00:12

+1

它也避免了競爭條件:你檢查文件是否存在,並且它在那裏,但這並不意味着當調用fopen時(或者反過來)它就會在那裏。 – 2011-04-13 04:21:15