Ich entwickle eine einfache ASP.NET WebApi-Anwendung. In einem Controller habe ich eine POST-Aktion, die den folgenden Code tut:Warum erhalte ich FileNotFoundException, wenn ich FileMode.OpenOrCreate verwende?
using (var isoStore = IsolatedStorageFile.GetUserStoreForAssembly())
{
using (var textWriter = new StreamWriter(
isoStore.OpenFile(filename, FileMode.OpenOrCreate | FileMode.Truncate)))
{
// write to file
}
}
die die FileNotFoundException
Ausnahme auf der using
Linie wirft, wenn die Datei nicht existiert (es funktioniert gut, wenn die Datei vorhanden ist).
Wenn ich es wie folgt umschreiben:
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));
}
}
alles funktioniert gut, und ich kann in die Datei schreiben, unabhängig davon, ob es existiert oder nicht.
Ist nicht der Zweck von OpenOrCreate
beide Fälle aus dem zweiten Snippet in einem einzigen Anruf zu decken?
Können Sie eine Implementierung von isoStore.OpenFile() anzeigen? –
@PawelMaga Dies ist eine Methode einer Standardklasse aus dem Namensraum 'System.IO.IsolatedStorage'. Ich habe einen fehlenden Code hinzugefügt, um dies zu verdeutlichen. – BartoszKP
Warum verwenden Sie bitweise OR auf der FileMode Enum, die keine Bitmaske ist? FileMode.OpenOrCreate (4 = 100) | FileMode.Truncate (5 = 101) = 5 (101) was im Grunde nur Truncate ist, was eine existierende Datei erfordert. – Shiffty