我使用文件名,文本框,「瀏覽」按鈕以及其他一些特定於我的應用程序的功能來編寫輸出文件名選擇的自定義控件。是否可以確定某個文件可以在不打開的情況下寫入?
文本框根據文件名改變顏色。如果文件位置無法寫入,則會變成紅色。如果該文件已經存在,則會變爲黃色。否則,它仍然是系統分配的顏色。
要查看文件是否存在,我使用IO.File.Exists;夠簡單。
我實現了「如果可以寫入文件」作爲一個簡單的try-catch塊,其中實際打開一個文件,寫入文件,關閉然後刪除。如果在任何時候拋出異常,我知道用戶不能使用該文件名,並將文本框變爲紅色。
這是一個全面的;因爲我正在做實際的操作,我打算這麼做,這是很簡單的。然而,讓軟件創建和刪除像瘋了似的文件似乎是不負責任的,只是爲了看看它是否可以。
所以我的問題是,如何在不創建文件的情況下複製此功能?我可以看到我必須:
- 檢查路徑是否合法(例如,'z:'不是有效的文件名)。這需要解析路徑並確保所有目錄都存在。
- 如果該位置存在,我必須檢查寫入權限。 (爲此已存在幾個回答問題。)
還有其他什麼嗎?
編輯
幾分鐘內,我看到人們已經開始投票了該批評的是我在所有該文件是它發生的實際寫入之前訪問檢查答案。雖然我很欣賞專家們從我的問題中「退後一步」,看看是否有完全不同的方式來實現它,但告訴我,我不應該這樣做,這不是我的問題的答案。
因此,讓我詳細說明我的應用程序(我不希望同時有數百個用戶)。
我在數據採集應用中使用這個文件選擇器控制。在許多情況下,您即將進行的測試在某種程度上是「昂貴的」。因此,非常仔細地設置它是非常重要的。覆蓋數據可能非常昂貴(並且對於可怕的用戶,我有一個複選框會將日期和時間附加到文件名的毫秒)。
因此,我的指示顏色的目的不是爲了讓軟件知道文件可以寫入(該檢查仍然在實際需要的時刻完成)而提供一個絕對的方式,它是用作指示器對於用戶來說,至少他已經正確設置了文件名,所以如果他繼續前進,他肯定不會覆蓋舊數據,並且他的差不多確定最後一刻的IO錯誤(文件名類型錯誤)不會讓實驗運行未記錄。
也有可能使用線程方法進行此操作,並在文件解鎖後提交數據。當然,唯一的問題是鎖定文件中的任何更改是否會影響要寫入的數據。 – Paul
看到我的編輯並相應地更改您的答案。 – pelesl
@Westie:在文件IO麻煩的情況下將數據保存在RAM中是一個好主意。 – pelesl