我的程序对我来说是练习,但是,当我尝试写入它找到的所有目录时,它崩溃了。我尝试了以下方法: 让它写入文件流而不是文件本身 使用 File.Writealllines 使用列表(这有效,只有前五个而不是更多) FileStream.Write(subdir.ToCharArray()) 我不明白为什么这不起作用,我做错了什么?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();} 最佳答案 它的递归。因为你在这里再次调用 Method :Console.WriteLine(subdir);sw.Write(subdir);Method(subdir); // BOOM您的文件已打开。您无法再次打开它进行写入。在 Main 中打开文件一次..static void Main(string[] args) { using (StreamWriter sw = new StreamWriter(@"C:\users\"+Environment.UserName+"\desktop\log.txt",true)) { Method(@"C:\", sw); }}然后在你的方法中接受它:public static void Method(string dir, StreamWriter sw) {然后当你再次调用它时:sw.Write(subdir);Method(subdir, sw); // pass in the streamwriter.但请注意,您将很快开始消耗内存。您正在遍历整个 C:\驱动器。也许在较小的文件夹上测试它?关于c# - 另一个进程正在使用 StreamWriter 使用的文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20040056/
10-11 07:04