创建不存在的XML文件后写入时抛出System.IO.IOException异常
问题分析与解决
问题原因
你使用File.AppendText/File.Create/File.CreateText创建文件时,这些方法会返回一个未关闭的流对象(StreamWriter或FileStream),这个流会一直持有文件的独占访问句柄,导致后续写入操作无法访问文件。只有当程序退出时,.NET垃圾回收器才会回收未释放的流、释放文件句柄,所以第二次运行程序时能正常操作。
解决方案
方法1:用using语句自动释放流
using语句会在代码块结束时自动调用流的Dispose()方法,确保文件句柄被释放:
// 检查文件是否存在,不存在则创建 if (!File.Exists(Globals.baseDir + @"emp.xml")) { using (File.CreateText(Globals.baseDir + @"emp.xml")) { // 无需额外操作,using会自动关闭并释放流 } }
方法2:手动关闭流
显式调用Close()方法释放文件资源:
if (!File.Exists(Globals.baseDir + @"emp.xml")) { StreamWriter writer = File.CreateText(Globals.baseDir + @"emp.xml"); writer.Close(); // 手动关闭流,释放文件句柄 }
方法3:合并创建与写入逻辑
如果后续要直接写入内容,可直接使用File.AppendAllText或File.WriteAllText,这些方法会自动处理文件创建,且操作完成后立即释放资源:
// 无需单独判断文件是否存在,不存在则自动创建,写入后自动释放资源 File.AppendAllText(Globals.baseDir + @"emp.xml", "你的XML内容");
内容的提问来源于stack exchange,提问作者SilverFish
相关产品推荐
相关产品推荐

