将字符串数组写入文件,但它只打印System.string[]

本文关键字:打印 System string 数组 字符串 文件 | 更新日期: 2023-09-27 18:19:33

我已经写了这段代码,但有一些问题:

    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[]

将字符串数组写入文件,但它只打印System.string[]

由于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));

这是因为currentRowValues不会通过将其提供给FileStream.Write而序列化回逗号分隔的值列表,因为它会写入对象类型名称ToString的返回值。

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

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

您的问题就在这个片段中:

  writer.Write(currentRowValues);

尝试:

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

根据您的需要

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

我建议如下:

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

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