我正在开发一个简单的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
,它期望文件在那里。
通常,OpenOrCreate
和Truncate
是打开文件的两种不同模式,因此您需要选择一种(Create
是您所需文件的合理替代品,请@Damien_The_Unbeliever贡献)。
关于c# - 为什么在使用FileMode.OpenOrCreate时出现FileNotFoundException?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46038441/