2013-09-22 77 views
3

我在std.file中缺少一個函數,用於檢查成員DirEntry是否意味着它可以被特定用戶標識(默認爲當前用戶)讀取。有人寫過這樣的邏輯嗎?爲什麼在標準庫中沒有這樣一個經常使用的函數呢?檢查文件/目錄條目是否可讀

+0

你在寫什麼樣的應用程序,你認爲在文件存在但不可讀的情況下不依賴於例外是正確的? –

+0

我在以前的一篇關於stackoverflow的D-post中從andralex得到了這個建議。 –

+0

你是指[這篇文章](http://stackoverflow.com/a/18905577/21501)?因爲對我來說,安德烈似乎是在說相反的事情 - 使用異常處理。 –

回答

4

我知道這樣的功能並不難寫。

真的嗎?我期待看到您的實施可以在D支持的所有系統上運行。這包括對Windows和Linux ACL的支持,更不用說安全軟件,比如SELinux。

我相當肯定,檢查打開文件是否成功的通用正確方法是嘗試打開文件。如果你能夠接近一個近似值,並且只關心Linux,那麼你可以使用C eaccess函數 - 但它不是POSIX的一部分,只能在Linux上工作。如果你的程序永遠不會以root身份運行,你可以使用POSIX的一部分access。就我個人而言,如果沒有很好的理由,我不會走這條路。如果您擔心性能(並且您期望有很多文件存在但由於某些原因而不可讀),則可以使用C函數(fopen或POSIX open),但我只會在執行此操作時執行此操作分析實際上顯示了異常處理造成的瓶頸。更不用說,您需要準備好拋出異常,正如上面以及您之前關於此主題的問題所討論的那樣。

只要使用異常處理,除非你真的知道你在做什麼。

+1

好的。對不起,你是對的。我有點sl of。我從我的帖子中刪除了關於「不難」的帖子。謝謝。 –