将字符串数组写入文件,但它只打印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[]
由于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。