为什么在使用 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.Truncate
,它需要一个文件。
一般来说,OpenOrCreate
和 Truncate
是两种不同的打开文件的方式,因此您需要选择一种(Create
是您需要的合理替代方式,归功于@Damien_The_Unbeliever).
我正在开发一个简单的 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.Truncate
,它需要一个文件。
一般来说,OpenOrCreate
和 Truncate
是两种不同的打开文件的方式,因此您需要选择一种(Create
是您需要的合理替代方式,归功于@Damien_The_Unbeliever).