调用StreamWriter时提示文件被占用,未启动相关进程求助
文件被占用问题的原因及解决方法
问题根源
你遇到的报错:
进程无法访问文件“C:\csharp\notebook.txt”,因为它正被另一个进程使用。
问题出在File.Create(@"C:\csharp\notebook.txt")这一行。File.Create方法执行时会创建文件并打开一个未关闭的文件流,这个流会一直占用文件资源,导致后续的StreamWriter无法获取文件访问权限。
解决方案
方案1:手动关闭File.Create返回的流
调用File.Create后立即关闭返回的FileStream:
File.Create(@"C:\csharp\notebook.txt").Close();
方案2:用using语句自动释放资源(推荐)
using语句会在代码块结束时自动释放文件流资源,避免手动关闭遗漏:
using (File.Create(@"C:\csharp\notebook.txt")) {}
方案3:去掉冗余的File.Create调用(最优)
StreamWriter在目标文件不存在时会自动创建文件,完全不需要单独调用File.Create,简化后的代码如下:
using System; using System.IO; namespace NLP { class Exercise { static void Main(string[] args) { Directory.CreateDirectory(@"C:\csharp"); if (File.Exists(@"C:\csharp\notebook.txt")) Console.WriteLine("Success"); else Console.WriteLine("bruh"); // 使用using确保StreamWriter被正确释放 using (StreamWriter text = new StreamWriter(@"C:\csharp\notebook.txt")) { // 在这里写入内容,例如: // text.WriteLine("测试文本"); } } } }
关于追加文本的补充
如果你想读取控制台输入并追加到文件末尾,需要给StreamWriter构造函数传入第二个参数true(表示追加模式),示例代码:
using (StreamWriter text = new StreamWriter(@"C:\csharp\notebook.txt", true)) { Console.WriteLine("请输入要添加的文本:"); string userInput = Console.ReadLine(); text.WriteLine(userInput); }
内容的提问来源于stack exchange,提问作者Michał
相关产品推荐
相关产品推荐

