我正在开发一个简单的ASP.NET WebApi应用程序。在控制器中,我具有执行以下代码的POST操作:

using (var isoStore = IsolatedStorageFile.GetUserStoreForAssembly())
{
    using (var textWriter = new StreamWriter(
        isoStore.OpenFile(filename, FileMode.OpenOrCreate | FileMode.Truncate)))
    {
        // write to file
    }
}


当文件不存在时,它会在FileNotFoundException行上抛出using异常(当文件存在时,它工作正常)。

当我将其重写如下时:

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.Truncate,它期望文件在那里。

通常,OpenOrCreateTruncate是打开文件的两种不同模式,因此您需要选择一种(Create是您所需文件的合理替代品,请@Damien_The_Unbeliever贡献)。

关于c# - 为什么在使用FileMode.OpenOrCreate时出现FileNotFoundException?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46038441/

10-11 15:48