簡體   English   中英

為什么在使用FileMode.OpenOrCreate時出現FileNotFoundException?

[英]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 ,它期望文件在那里。

通常, OpenOrCreateTruncate是打開文件的兩種不同模式,因此您需要選擇一個( Create是滿足您需要的合理替代方法,應歸功於@Damien_The_Unbeliever)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM