使用StreamWriter

时间:2016-02-29 08:39:12

标签: c#

我试图从一个数据表文本文件中编写一个文本文件,稍后将由其他应用程序导入该文本文件,因此我需要在导出的文件中没有空行(最后或之间) )。 我使用了以下代码:

DataTable table = FisierSoldata.dtSoldata;
 var result = new StringBuilder();
        foreach (DataRow row in table.Rows)
        {
            for (int i = 0; i < table.Columns.Count; i++)
            {
                result.Append(row[i].ToString());
                result.Append(i == table.Columns.Count - 1 ? "\n" : " ");
            }
            result.AppendLine();
        }

        StreamWriter objWriter = new StreamWriter(filePath, false);
        objWriter.WriteLine(result.ToString());
        objWriter.Close();

我的数据表有26条记录,当文件生成时,它有一个数据线,后跟一条空行和另一条数据线,依此类推,最后一个数据线后面有3条空行。 我如何修改代码,以便只有数据之间没有空数据的数据,而没有最后3个空数据? 的问候,

LE:我通过阅读一些类似的线程找到了解决方法,但解决方案是使用streamwriter和streamreader,以便从将生成的文件中删除不需要的数据(空行)。但我想知道是否有从一开始就根据需要获取文件的方法。

2 个答案:

答案 0 :(得分:3)

为什么不使用File.WriteAllLines,它在幕后使用StreamWriter,但允许更简单的代码:

var fileLines = table.AsEnumerable()
    .Select(row => String.Join(" ", row.ItemArray))
    .Where(line => !String.IsNullOrWhiteSpace(line));
File.WriteAllLines(filePath, fileLines);

但你真的想用空格作为列分隔符吗?这非常容易出错。只要一个字段值包含空格,它就会失败。

答案 1 :(得分:0)

我会尽量避免将空行添加到Stringbuild。 Stringclass应该提供适当的函数,可能是这样的:

            String stringToTestIsEmpty = row[i].ToString();
            //Check if it is not an empty line
            if( ! String.IsNullOrWhiteSpace(stringToTestIsEmpty ))
            {
                resutl.Append(stringToTestIsEmpty);
            }