我正在开发一个简单的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
的目的不是在一次通话中从第二个代码段中涵盖这两种情况吗?
答案 0 :(得分:5)
FileMode.OpenOrCreate | FileMode.Truncate
枚举不是标志类型枚举,这意味着您不应对其执行按位操作。 FileMode.Truncate
解析为期望文件存在的OpenOrCreate
。
一般来说,Truncate
和Create
是打开文件的两种不同模式,因此您需要选择一个({{1}}作为您需要的合理替代方案,归功于@Damien_The_Unbeliever )。