Fichier utilisé par un autre processus à l'aide de StreamWriter
Mon programme était pratique pour moi, cependant, lorsque j'essaie d'écrire tous les répertoires, il a trouvé, il se bloque.
J'ai essayé le suivant:
- L'avoir à l'écrire dans un fichier de flux à la place du fichier lui-même
- à l'aide de Fichier.Writealllines à l'aide d'une liste<> (cela a fonctionné, seulement il l'a fait la première de cinq et pas plus)
- FileStream.Écrire(sous répertoire.ToCharArray())
Je ne vois pas pourquoi cela ne marcherait pas, qu'ai-je fait de mal?
static void Main(string[] args)
{
Method(@"C:\");
}
static void Method(string dir)
{
//crash happens here v
StreamWriter sw = new StreamWriter(@"C:\users\"+Environment.UserName+"\desktop\log.txt",true);
foreach (string subdir in Directory.GetDirectories(dir))
{
try
{
Console.WriteLine(subdir);
sw.Write(subdir);
Method(subdir);
}
catch (UnauthorizedAccessException)
{
Console.WriteLine("Error");
}
}
sw.Close();
}
Vous devez vous connecter pour publier un commentaire.
Son récursive.
Parce que vous êtes à l'appel de
Method
ici:Votre fichier est déjà ouvert. Vous ne pouvez pas l'ouvrir pour écrire à nouveau.
Ouvrir le fichier dans
Main
une fois..Il faut l'accepter dans votre méthode:
Puis, quand vous l'appelez de nouveau:
Noter cependant, que vous allez rapidement commencer à mâcher de la mémoire. Vous êtes recursing à travers l'ensemble de votre disque C:\. Peut-être le tester sur un plus petit dossier?
Semble que vous ne fermez pas votre streamwriter avant de l'utiliser à nouveau
Aussi, une autre suggestion, pourquoi ne pas utiliser "le Système de.IO.Fichier.AppendAllText(Chemin,Texte)" méthode? c'est plus facile à utiliser