在文本文件中删除空行

15

在C#中如何从文本文件中删除空行?


7
@Dee Jay:因为拼写错误扣1分是不必要的,可以通过编辑来纠正。 - amit
5
@Tieson T.,我能不能更具体些,只需从文本文件中删除空行,该文件有多行,有些为空白行,有些包含字符串。 - Mike
6
Mike,你的问题历史表明你试图只依靠社区帮助编写一个简单的应用程序。这是自私的,也不是真正的编程。拿起一本书,跟着一些教程走 - 这将对你长期发展更有好处。 - Michael Petrotta
2
我认为这被称为“群体行为”。人们没有关注问题本身,虽然问题很简单,但相当明确,而是开始挑剔拼写和其他无关紧要的事情。一切都始于一个不合法的-1拼写错误。人们,你们为什么这么生气呢? - Alex Aza
4
@Hans Passant - 对于这些问题的答案是不同的。重复行的问题稍微复杂一些,解决方案会更消耗内存。两个问题已经有了答案,你可以看到答案是不同且不能互换的。 - Alex Aza
显示剩余8条评论
4个回答

35
如果文件很小:
var lines = File.ReadAllLines(fileName).Where(arg => !string.IsNullOrWhiteSpace(arg));
File.WriteAllLines(fileName, lines);
如果文件很大:
var tempFileName = Path.GetTempFileName();
try
{
    using (var streamReader = new StreamReader(inptuFileName))
    using (var streamWriter = new StreamWriter(tempFileName))
    {
        string line;
        while ((line = streamReader.ReadLine()) != null)
        {
            if (!string.IsNullOrWhiteSpace(line))
                streamWriter.WriteLine(line);
        }
    }
    File.Copy(tempFileName, inptuFileName, true);
}
finally
{
    File.Delete(tempFileName);
}

2
不适用于大文件,因为整个文件可能只有一行,然后您仍然需要使用ReadLine()将其全部读入内存中... - md1337
1
有趣的是,在搜索这个主题时,我发现了这篇博客文章,支持这个答案:http://chrisfulstow.com/counting-blank-lines-in-a-large-text-file-with-csharp-and-dotnet 它基本上显示了指标,表明对于非常大的文件使用streamReader,否则只需使用ReadAllLines方法。 - atconway
没有起作用...“无法将类型void隐式转换为字符串”。 - KMC

11
File.WriteAllLines(path, File.ReadAllLines(path).Where(l => !string.IsNullOrWhiteSpace(l)));

4
将文件的所有内容读入一个字符串,然后直接运行。
string output = null;
try {
    output = Regex.Replace(input, @"^\s*$", "", RegexOptions.Multiline);
} catch (Exception e) {

}

其他类似的选项可以在如何从格式化字符串中删除空行?中找到。


1
我们可以通过使用LINQ技术轻松地实现对大或小文件的操作。 1.说明:它将读取文件并跳过所有空行,并将所有数据存储到一个字符串数组中。
                    string[] text = File.ReadAllLines(path with file name).Where(s => s.Trim() != string.Empty).ToArray();
  1. It will delete that file.

                    File.Delete(path with file name);
    
  2. It will create new file as same name and append all the array data into new file

                    File.WriteAllLines(path with file name, text);
    

完整代码

                string[] text = File.ReadAllLines(LoraWan_Parameter_Check_Tool.Properties.Settings.Default.csv_file_path.ToString()).Where(s => s.Trim() != string.Empty).ToArray();
                File.Delete(LoraWan_Parameter_Check_Tool.Properties.Settings.Default.csv_file_path.ToString());
                File.WriteAllLines(LoraWan_Parameter_Check_Tool.Properties.Settings.Default.csv_file_path.ToString(), text);
问题已解决
谢谢

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接