我正在開發一個簡單的ASP.NET WebApi應用程序。在控制器我有一個POST操作,做了下面的代碼:爲什麼使用FileMode.OpenOrCreate時會出現FileNotFoundException?
using (var isoStore = IsolatedStorageFile.GetUserStoreForAssembly())
{
using (var textWriter = new StreamWriter(
isoStore.OpenFile(filename, FileMode.OpenOrCreate | FileMode.Truncate)))
{
// write to file
}
}
其拋出的using
線的時候文件不存在FileNotFoundException
異常(正常工作時,該文件存在)。
當我把它改寫如下:
using (var isoStore = IsolatedStorageFile.GetUserStoreForAssembly())
{
StreamWriter textWriter;
if (!isoStore.FileExists(filename))
{
textWriter = new StreamWriter(isoStore.CreateFile(filename));
}
else
{
textWriter = new StreamWriter(
isoStore.OpenFile(filename, FileMode.Open | FileMode.Truncate));
}
}
一切工作正常,我可以寫入文件,無論它的存在與否。
不是OpenOrCreate
目的,以支付第二片段兩種情況下,在一個單一的電話嗎?
你能表現出isoStore.OpenFile的實現()? –
@PawelMaga這是一個標準的類從'System.IO.IsolatedStorage'命名空間的方法。我已經添加了一段代碼來澄清這一點。 – BartoszKP
爲什麼在FileMode枚舉上使用按位或不是一個位掩碼? FileMode.OpenOrCreate(4 = 100)| FileMode.Truncate(5 = 101)= 5(101)這基本上只是Truncate,它需要一個現有的文件。 – Shiffty