将字符串数组写入File但只打印System.String []

时间:2014-08-27 14:50:49

标签: c#

我写过这段代码但有一些问题:

    const int maxPeopleInFile = 2;

    using (StreamReader reader = new StreamReader(@"c:\mytest\SortedTest.txt"))
    {
        string[] columnheaders = reader.ReadLine().Split(',');
        List<string> listKeeper = new List<string>();
        int fileNumber = 1;

        while (reader.Peek() > 0)
        {
            string[] currentRowValues = reader.ReadLine().Split(',');
            string id = currentRowValues[2];

            if (listKeeper.Count < maxPeopleInFile || (listKeeper.Count() <= maxPeopleInFile && listKeeper.Contains(id)))
            {
                if (!listKeeper.Contains(id))
                {
                    listKeeper.Add(id);
                }

                var writer = File.CreateText("file_" + fileNumber + ".txt");
                writer.Write(currentRowValues);
                writer.Close();
            }
            else // new file
            {
                fileNumber++;
                listKeeper = new List<string>();
                var writer = File.CreateText("file_" + fileNumber + ".txt");
                writer.Write(currentRowValues);
            }
        }
    }

问题: 1:生成的文件没有我在string[] currentRowValues = reader.ReadLine().Split(',');中读过的行 写入文件的内容是一行,文本为System.String[]

4 个答案:

答案 0 :(得分:2)

由于currentRowValues是一个数组,因此调用

writer.Write(currentRowValues);

相当于

writer.Write(currentRowValues.ToString());

生成您看到的输出(即System.String[]),因为ToString() 迭代各个字符串值。

您可以使用File.WriteAllLines一次性将整个数组写入文件,如下所示:

File.WriteAllLines("file_" + fileNumber + ".txt", currentRowValues);
  

(来自评论) [我]想把[我从原始文件中读取的确切行]放在一个新文件中,就像以前在原始文件中一样

然后您应该使用string.Join撤消string.Split

的效果
writer.Write(string.Join(",", currentRowValues));

答案 1 :(得分:1)

这是因为currentRowValues只是将FileStream.Write传递回逗号分隔的值列表,因为它会写入ToString的返回值。 1}}这是对象类型名称。

一种可能的方法可能是使用string.Join

writer.Write(string.Join(",", currentRowValues));

答案 2 :(得分:0)

您的问题出在此代码段中:

  writer.Write(currentRowValues);

尝试:

  writer.Write(currentRowValues[0]);
or 
  writer.Write(currentRowValues[1]);

取决于您的需求

答案 3 :(得分:0)

您需要为string方法提供Write()值,而不是string[]

我建议如下:

StringBuilder builder = new StringBuilder();
foreach (var currentValue in currentRowValues)
    builder.Append(currentValue);
writer.Write(builder.ToString());

注意:不要忘记添加命名空间以便能够使用StringBuilder。