StreamWriter ne pas écrire dans un fichier qui n'existe pas
Je fais un éditeur de niveau pour mon jeu, et plus il fonctionne sauf...
Lorsque j'essaie d'enregistrer mon fichier XML () le fichier n'est pas créé, et dans la zone sortie j'obtiens:
A first chance exception of type 'System.NullReferenceException'
Le plus drôle, c'est que cela arrive seulement si le fichier n'existe pas, mais il fonctionne correctement si je remplacer un autre fichier.
voici le code que j'utilise:
using (StreamWriter stream = new StreamWriter(filePath))
{
stream.Write(data);
stream.Close();
}
de données est une chaîne de caractères (ce n'est pas le problème, car il fonctionne quand je remplace le fichier)
La ligne qui donne la
Il n'est pas dit, je pense que le StreamWriter doit attraper l'exception et de Débogage.WriteLine le message
La seule chose que je peux penser, c'est que le programme n'a pas créer des autorisations pour le répertoire. Essayez de supprimer le
nope, l'exception s'il n'apparaît toujours pas, c'est juste écrit à la sortie de la boîte
oui, ils travaillent si le fichier existe
NullReferenceException
?Il n'est pas dit, je pense que le StreamWriter doit attraper l'exception et de Débogage.WriteLine le message
La seule chose que je peux penser, c'est que le programme n'a pas créer des autorisations pour le répertoire. Essayez de supprimer le
using
(à des fins de débogage uniquement) et voir si vous obtenez un plus significatif exception.nope, l'exception s'il n'apparaît toujours pas, c'est juste écrit à la sortie de la boîte
oui, ils travaillent si le fichier existe
OriginalL'auteur annonymously | 2012-01-07
Vous devez vous connecter pour publier un commentaire.
Vous êtes manque un constructeur qui prend une valeur de type boolean qui peut aider à créer le fichier:
La logique est en fait est un peu plus complexe que cela, cependant:
Si le fichier existe, je veux l'écraser, ne pas ajouter
Je ne pense pas que ce soit le bon surcharge. Le problème n'est pas que le fichier est écrasé, mais qu'il n'est pas créé dans la première place.
J'ai pris un coup d'oeil et avec
append
êtrefalse
ce constructeur sera toujours de créer le fichier s'il n'existe pas. Comme par ceci: Initialise une nouvelle instance de la classe StreamWriter pour le fichier spécifié dans le chemin d'accès spécifié, en utilisant le codage par défaut et la taille de la mémoire tampon. Si le fichier existe, il peut être remplacé ou ajouté. Si le fichier n'existe pas, ce constructeur crée un nouveau fichier.Lors de l'utilisation de la
using
mot-clé, vous n'avez pas besoin d'appelersw.Close()
, il est pris en charge automatiquement. (ce qui est le point de l'ensemble de l'aideusing
en premier lieu)OriginalL'auteur Grant Thomas
Pourquoi ne pas simplement aller autour de la solution de facilité, et vérifier l'existence du fichier avant d'écrire:
J'aimerais vraiment pas plus compliqué que cela personnellement. Aussi, ne pas fermer la
StreamWriter
, leusing
déclaration dispose de fois qu'il a atteint son but.Personnellement, je ne le pense pas. Même si elle peut être redondant, il le rend plus facile à lire, à comprendre et à déboguer.
Ce n'est pas plus facile à lire. Ce que ce code dit à propos des conditions de course? Que faire si d'autres processus supprime le fichier juste après sa création? C'erreur sujette à des conditions de course. StreamWriter a pour créer correctement le fichier. Sinon c'est un bug .NET.
OriginalL'auteur aevitas
Dans mon cas, j'ai été l'exécution du programme en tant que non-admin, le fichier devait être écrit à l'intérieur d'un dossier qui a été créé avec les droits d'administrateur (même à l'intérieur ProgramFiles ou la non-admin emplacement). Le fichier n'est jamais créé et vous devez activer manuellement la
Managed Debugging Assistants
exception des pauses afin de voir toute erreur.Solution a été de supprimer le dossier et de le créer à nouveau avec mon compte admin. Notez également que StreamWriter ne pas de créer un répertoire des arbres, seuls les fichiers.
OriginalL'auteur Sergio Basurco
Avez-vous essayé de ne pas utiliser de Fichier.Créer()? comme:
Lorsque j'exécute ce code, il crée un fichier si il n'existe pas. Et l'écrase il existe - n'est-ce pas le comportement que vous vouliez?
Ok, je vois, c'est la façon dont il doit se comporter, mais il ne fonctionne pas sur votre ordinateur. Pouvez-vous obtenir une trace de la pile? Avez-vous essayé de voir si vous avez la dernière version de l' .NET framework? Peut-être que d'une certaine manière vous disposez d'écrire mais pas de l'autorisation de création du dossier?
J'ai la dernière .net framework, et je suis sûr que j'ai créer des autorisations pour le dossier. Comme pour la trace de la pile, je suis désolé mais je n'arrive pas à déboguer après l'erreur, il vient reprend le programme
Vous pouvez essayer d'exécuter la libre filemon application pour voir si elle vous donne plus de détails. Il y a aussi un réglage dans visual studio qui va geler l'application lorsqu'une exception est levée, même traitées. Enfin, vous pouvez ajouter du code à la sortie de la trace de la pile.
OriginalL'auteur Luis Perez