2011-10-03 4 views
1

Je suis en train de faire l'éditeur dans C#, windows forms. Je souhaite sauvegarder le 'nouveau contenu' du fichier dans le même fichier (utilisation habituelle de l'option 'save') mais je reçois IOException, [le processus ne peut pas accéder au fichier 'filename' car il est utilisé par un autre processus. J'ai une méthode qui écrit dans un nouveau fichier et cela fonctionne. Comment l'utiliser pour remplacer le fichier actuel.C# écraser/sauvegarder le fichier courant

Edit: J'utilise BinaryWriter http://msdn.microsoft.com/en-us/library/atxb4f07.aspx

+0

Comment ouvrez-vous le fichier texte? C'est probablement juste un cas de réglage du drapeau d'écrasement ... –

+2

pouvez-vous afficher le code que vous utilisez en ce moment pour enregistrer le fichier? –

+1

Comment avez-vous ouvert le fichier? Sans code, il sera très difficile de dire ce qui ne va pas. – ChrisF

Répondre

5

Les chances sont que lorsque vous chargez le fichier, vous ne fermez pas la FileStream ou tout ce que vous avez utilisé pour le lire. Utilisez toujours un using statement pour vos flux (et d'autres types implémentant IDisposable), et cela ne devrait pas poser de problème. (Bien sûr, si vous en fait avez ce fichier ouvert dans une application séparée, c'est un problème totalement différent.)

Ainsi, au lieu de:

// Bad code 
StreamReader reader = File.OpenText("foo.txt"); 
string data = reader.ReadToEnd(); 
// Nothing is closing the reader here! It'll keep an open 
// file handle until it happens to be finalized 

Vous devez utiliser quelque chose comme:

string data; 
using (TextReader reader = File.OpenText("foo.txt")) 
{ 
    data = reader.ReadToEnd(); 
} 
// Use data here - the handle will have been closed for you 

Ou idéalement, utilisez les méthodes File qui font tout pour vous:

string text = File.ReadAllText("foo.txt"); 
3

Vérifiez si vous fermez le flux vers le fichier. Si non, alors vous vous bloquez.

1

En supposant que vous avez correctement fermé le flux que vous avez utilisé pour ouvrir et lire le fichier d'abord, pour créer, ajouter ou échouer en fonction de l'existence de fichiers, vous devez utiliser le paramètre FileMode dans le constructeur FileStream.

Tout dépend de la façon dont vous ouvrez le FileStream, voir ici: FileStream Constructor (String, FileMode)

si vous spécifiez FileMode Créer:

Indique que le système d'exploitation devrait créer un nouveau fichier. Si le fichier existe déjà, il sera écrasé. Cela nécessite FileIOPermissionAccess.Write. System.IO.FileMode.Create est équivalent à pour demander que si le fichier n'existe pas, utilisez CreateNew; sinon, utilisez Truncate. Si le fichier existe déjà mais est un fichier caché , une exception UnauthorizedAccessException est levée.

Questions connexes