2011-10-06 67 views
0

在我的單元測試,我使用下面的代碼打開一個流和寫入: 附加信息:爲什麼第二次寫入同一個文件時會拋出IsolatedStorageException異常?

IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForApplication(); 
stream = m_store.OpenFile(filename, FileMode.Create); 
... 
stream.Flush(); 
stream.Close(); 
stream.Dispose(); 
store.Dispose() 

的第一次成功,但它失敗,出現以下日誌輸出第二次:在IsolatedStorageFileStream上不允許操作。

的FileMode.Create枚舉常量的定義爲:

指定操作系統應創建一個新的文件。如果文件已經存在,它將被覆蓋。創建相當於請求如果文件不存在,請使用CreateNew;否則,使用截斷。

所以看起來這是正確的常數。

我發現在計算器如 IsolatedStorageFileStream exception is throw when file is opened?

幾個類似的問題,但他們並沒有幫助。由於在網絡上的某個地方建議(現在找不到鏈接),我嘗試刪除該文件第一,如果它存在,違背了枚舉的意見,像下面,但並沒有幫助:

if (store.FileExists(filename)) 
{ 
    store.DeleteFile(filename); 
} 

問題:我錯過了什麼?

謝謝!

回答

1

首先,你應該真的使用using聲明,而不是顯式調用CloseDispose - 否則,如果有一個例外,你不會已經關閉了流。

其次,我懷疑問題是你沒有處置商店本身。試試這個:

using (var store = IsolatedStorageFile.GetUserStoreForApplication()) 
using (var stream = store.OpenFile(filename, FileMode.Create)) 
{ 
    ... 
} 
+0

謝謝,但這不是很不幸...上面的代碼有點過分簡化了。本地變量實際上是一個類中的數據成員,我實際上是在成員函數中進行關閉操作,並且還在該函數中處理該存儲。我還添加了日誌語句,所以我確信這個函數被稱爲...我不能使用一個使用,因爲打開和寫入流是在我正在實現的類之外完成的... – swinefeaster

+2

@swinefeaster:它是如果您發佈不同問題的代碼,很難說出真正的代碼有什麼問題。我很欣賞真正的短而完整的程序在手機應用程序中發佈有些困難,但是您可以發佈一個簡短但完整的程序節*。 –

+0

好吧,我的壞...很抱歉浪費你的時間。我正確地關閉了輸出流,但沒有輸入流(用於讀取文件)。這是造成這個問題的原因。但無論如何,使用關鍵字的好指針! – swinefeaster

0

你把引用的ISO-存儲在本地變量但後來你使用一個成員變量m_store創建流(?)。
這只是這個問題中的拼寫錯誤還是你正在執行的實際代碼?

+0

這是一個錯字...我會在今天晚些時候發佈一個更好的代碼示例 – swinefeaster

相關問題