![](/img/trans.png)
[英]FileMode.Open and FileMode.OpenOrCreate difference when file exists? c# bug?
[英]Why am I getting FileNotFoundException when using FileMode.OpenOrCreate?
我正在開發一個簡單的ASP.NET WebApi應用程序。 在控制器中,我具有執行以下代碼的POST操作:
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
的目的不是在單個調用中涵蓋第二個片段的兩種情況嗎?
FileMode
枚舉不是標志類型的枚舉,這意味着您不應對其進行按位操作。 FileMode.OpenOrCreate | FileMode.Truncate
FileMode.OpenOrCreate | FileMode.Truncate
解析為FileMode.Truncate
,它期望文件在那里。
通常, OpenOrCreate
和Truncate
是打開文件的兩種不同模式,因此您需要選擇一個( Create
是滿足您需要的合理替代方法,應歸功於@Damien_The_Unbeliever)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.