2010-01-22 64 views
4

我在我的Silverlight應用程序中使用OpenFileDialog()。當我使用ShowDialog()選擇一個文件時,它只是鎖定文件,直到我關閉我的應用程序。OpenFileDialog()鎖定文件夾

我不能夠在應用程序運行(在瀏覽器Silverlight應用程序)

重命名或刪除文件夾如果我嘗試選擇任何其他文件夾中的任何其他文件,我可以重命名一個文件夾。它似乎是釋放手柄。

我的目標:我想在完成上傳後重命名/刪除文件系統中的文件夾(手動)。

我知道不可能將OpenFileDialog()指向代碼中的其他文件夾。任何指針?

順便說一句,這是Windows錯誤信息:

的動作不能完成,因爲 的文件夾是在另一個程序中打開。 關閉文件夾並重試。

回答

0

AFAIK它的方式Windows文件系統的工作 - 你不能重命名文件夾,而有一些打開文件句柄裏面。確保在嘗試重命名文件夾之前從文件夾(File.Close()等)釋放所有資源。

+0

是的,我釋放所有資源。我在重命名文件(甚至是選定的文件)方面沒有任何問題。 – DigitalManic 2010-01-22 08:13:27

+0

所有資源,你也是。定位filedialog?關閉它是不夠的。 – nos 2010-01-22 09:40:52

+0

@nos:通常.Close和.Dispose在Disposable對象上是同義詞,但在這種情況下,OpenFileDialog既不是。 – AnthonyWJones 2010-01-22 10:11:15

0

已經賦值爲null持有到打開文件對話框和任何FileInfo的引用或在代碼的引用,所有的東西超出了範圍內的所有變量,那麼試試這個: -

GC.Collect(); 

它是一種非常嚴厲的事我通常不會推薦它。如果它不能解決您的問題,請將其解決。

+0

它沒有解決問題。 – DigitalManic 2010-01-22 11:24:46

2

我有同樣的問題。後續固定它

Stream fileStream = openFileDialog1.OpenFile(); 
if (fileStream != null) 
{ 
    ... 
    fileStream.Close(); 
} 

通過關閉流我的問題就走了...:P

+1

我認爲這是正確的答案。 OFD在Silverlight中返回一個打開的文件流,你必須先關閉它,好吧,它會被關閉:-)。稍微好一點的模式是在try/catch塊之外聲明Stream fileStream,然後放入「if(fileStream!= null)...「位於finally {}塊內 – 2010-04-15 21:44:32

1
using(var fileStream = openFileDialog1.OpenFile()) 
{ 
    // do your stuff 

} 

這將關閉流和解決您的問題。