如何在TextBox中检测并删除空行后保存至文本文件?
解决TextBox空行删除无效的问题
用户尝试在Window_Closing事件中删除名为Main的TextBox中的空行,再保存到文本文件,但始终无法实现,怀疑是换行符\n导致的判断问题,原代码如下:
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e) { int linecount = Main.LineCount; for(int i = 0; i < linecount; i++) { if(String.IsNullOrEmpty(Main.GetLineText(i)) == true) { Main.Text.Remove(i); } } string path = @"c:\temp\MyTest.txt"; File.WriteAllText(path, Main.Text, Encoding.UTF8); }
问题根源
- 空行判断不全面:TextBox里的空行可能包含空格、制表符这类空白字符,
String.IsNullOrEmpty只能识别完全空的字符串,对这类“伪空行”无效;另外GetLineText(i)返回的行可能带有隐藏的换行残留,也会导致判断失效。 - 字符串修改方式错误:
Main.Text.Remove(i)是返回一个新的字符串,不会直接修改原TextBox的Text属性,所以你的删除操作根本没生效。 - 遍历逻辑有漏洞:从前往后遍历删除行时,删除一行后后面的行会自动前移,原索引对应的内容已经变了,会导致部分空行被跳过。
修复方案
直接处理TextBox的文本内容,按行分割后过滤空行,再重新拼接,逻辑更清晰可靠:
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e) { // 按换行符分割文本,过滤掉空行和仅含空白字符的行 var validLines = Main.Text.Split(new[] { "\r\n", "\n" }, StringSplitOptions.RemoveEmptyEntries) .Where(line => !string.IsNullOrWhiteSpace(line)); // 重新拼接成无空行的文本,更新到TextBox Main.Text = string.Join(Environment.NewLine, validLines); string path = @"c:\temp\MyTest.txt"; File.WriteAllText(path, Main.Text, Encoding.UTF8); }
关键说明
- 用
string.IsNullOrWhiteSpace替代IsNullOrEmpty,能识别所有包含空白字符的无效行。 - 分割文本时同时兼容
\r\n(Windows换行)和\n(Unix换行),避免因换行符格式导致的分割错误。 - 使用
Environment.NewLine拼接文本,保证生成的文件换行符符合当前系统规范。
内容的提问来源于stack exchange,提问作者ZeuwsFrade
相关产品推荐
相关产品推荐

