C#文件存在时写入行报错求助及追加写入方法咨询
问题分析与修复方案
兄弟,你的代码里有几个明显的问题,直接导致了WriteLine处的报错,我给你拆解下:
报错的核心原因
目录判断逻辑搞反了
你定义的strRuta是文件路径"C:\\File.txt",但却用Directory.Exists(strRuta)去检查——这函数是用来判断路径是不是目录的,不是文件啊!如果要确保文件所在的目录存在,得先提取文件的目录部分,用Path.GetDirectoryName(strRuta)来判断。文件存在时
swArchivo没初始化
你的代码只有在文件不存在的时候才会创建swArchivo,要是文件已经存在,这个变量就是null,调用WriteLine可不就报空引用异常嘛!资源释放不够安全
手动调用Close()和Dispose()没问题,但如果中间代码抛出异常,这些操作可能就执行不到了,最好用using语句自动管理文件流的生命周期,省心还安全。
修正后的代码(包含追加写入逻辑)
我把你的代码改了下,同时实现了追加写入的需求:
string strRuta = "C:\\File.txt"; // 先确保文件所在的目录存在 string fileDirectory = Path.GetDirectoryName(strRuta); if (!Directory.Exists(fileDirectory)) { Directory.CreateDirectory(fileDirectory); } string psContenido = "Hola"; // 使用using自动处理文件流的打开/关闭,避免资源泄漏 using (StreamWriter swArchivo = File.Exists(strRuta) ? File.AppendText(strRuta) : File.CreateText(strRuta)) { if (!psContenido.ToLower().Contains("error")) { swArchivo.WriteLine(psContenido); // 这里Flush可以不用手动调用,using块结束时会自动处理,要是需要立即写入磁盘可以保留 // swArchivo.Flush(); } } // 修改文件创建时间要放在using外面,因为此时文件已经被关闭了 File.SetCreationTime(strRuta, DateTime.Now);
关于追加写入的几种方式
如果你只是想简单追加内容,还有更便捷的方法:
File.AppendText():就是上面代码里用的,返回一个StreamWriter,可以逐行写入,适合多次追加的场景。File.AppendAllText():一次性追加字符串到文件末尾,自动处理文件的打开和关闭,比如:File.AppendAllText("C:\\File.txt", "这是追加的一行文本\n");File.AppendAllLines():一次性追加多行文本,适合批量写入的场景:File.AppendAllLines("C:\\File.txt", new List<string> { "第一行追加内容", "第二行追加内容" });
内容的提问来源于stack exchange,提问作者AlexZ
相关产品推荐
相关产品推荐

