Je développe une application ASP.NET WebApi simple. Dans un contrôleur, j'ai une action POST qui fait le code suivant:Pourquoi est-ce que je reçois FileNotFoundException lors de l'utilisation de FileMode.OpenOrCreate?
using (var isoStore = IsolatedStorageFile.GetUserStoreForAssembly())
{
using (var textWriter = new StreamWriter(
isoStore.OpenFile(filename, FileMode.OpenOrCreate | FileMode.Truncate)))
{
// write to file
}
}
qui jette l'exception FileNotFoundException
sur la ligne using
lorsque le fichier n'existe pas (il fonctionne très bien lorsque le fichier existe).
Quand je le récrire comme suit:
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));
}
}
tout fonctionne bien, et je peux écrire dans le fichier, peu importe si elle existe ou non.
Le but de OpenOrCreate
n'est-il pas de couvrir les deux cas du deuxième extrait d'appel?
Pourriez-vous montrer une implémentation de isoStore.OpenFile()? –
@PawelMaga C'est une méthode d'une classe standard de l'espace de noms 'System.IO.IsolatedStorage'. J'ai ajouté un morceau de code manquant pour clarifier ceci. – BartoszKP
Pourquoi utiliser OU bit à bit sur le FileMode Enum, qui n'est pas un masque de bits? FileMode.OpenOrCreate (4 = 100) | FileMode.Truncate (5 = 101) = 5 (101) qui est essentiellement juste Truncate, ce qui nécessite un fichier existant. – Shiffty