C# C写出与列表框匹配的文本文件和另一个文本文件的内容

C# C写出与列表框匹配的文本文件和另一个文本文件的内容,c#,C#,我有一个从目录列表创建的文件。从用户从列表框中选择的每个项目中,应用程序读取目录并写出一个与所有内容匹配的文件。完成后,它将遍历列表框中的每个项目,并复制出与列表框选择匹配的项目。例如: 选择0001个匹配项: 0001456.txt 0001548.pdf。 我正在使用的代码处理0s不是很好,结果很糟糕 var listItems = listBox1.Items.OfType<string>().ToArray(); var writers = new StreamWriter[

我有一个从目录列表创建的文件。从用户从列表框中选择的每个项目中,应用程序读取目录并写出一个与所有内容匹配的文件。完成后,它将遍历列表框中的每个项目,并复制出与列表框选择匹配的项目。例如:

选择0001个匹配项:

0001456.txt 0001548.pdf。 我正在使用的代码处理0s不是很好,结果很糟糕

var listItems = listBox1.Items.OfType<string>().ToArray();
var writers = new StreamWriter[listItems.Length];
for (int i = 0; i < listItems.Length; i++)
{
    writers[i] = File.CreateText(
        Path.Combine(destinationfolder, listItems[i] + "ANN.TXT"));
}
var reader = new StreamReader(File.OpenRead(masterdin + "\\" + "MasterANN.txt"));

string line;
while ((line = reader.ReadLine()) != null)
{
    for (int i = 0; i < listItems.Length; i++)
    {
        if (line.StartsWith(listItems[i].Substring(0, listItems[i].Length - 1)))
            writers[i].WriteLine(line);
    }
}
纠正这个问题的建议

另一个样本: 我的列表框中有00001:它返回以下值: 00008771~63.txt 00002005~3.txt 00009992~1.txt 00001697~1.txt 00000001~1.txt 00009306~2.txt 00000577~1.txt 00001641~1.txt 00001647~1.txt 00001675~1.txt 00001670~1.txt

它只应返回: 00001641~1.txt 00001647~1.txt 00001675~1.txt 00001670~1.txt 00001697~1.txt


或者,如果有人能建议一种更好的方法来获取我列表框中的每一行,搜索第+*行,并且任何匹配项都会写出一个文本文件…

如果我误解了你的问题,很抱歉,但让我们从以下内容开始:

string line = String.Empty;
string selectedValue = "00001";
List<string> matched = new List<string>();
StreamReader reader = new StreamReader(Path.Combine(masterdin, "MasterANN.txt"));
while((line = reader.ReadLine()) != null)
{
    if(line.StartsWith(selectedValue))
    {
        matched.Add(line);
    }
}
这将匹配MasterANN.txt文件中以00001开头的所有行,并将它们添加到集合中。如果需要,我们将致力于将其写入文件中


这澄清了一些问题?

这几乎都是基于您给出的一个示例,但我相信问题在于,当您执行匹配时,如果您的列表项值为0,则会得到子字符串并切掉最后一个字符

在您的示例中,您试图匹配以00001开头的文件,但当您进行匹配时,将得到以零和value.length-1字符开头的子字符串,在本例中为0000。例如:

string s = "00001";
Console.WriteLine(s.Substring(0,s.Length-1));
导致

所以我想如果你改变了这一行:

if (line.StartsWith(listItems[i].Substring(0, listItems[i].Length - 1))) 
            writers[i].WriteLine(line);
对此

if (line.StartsWith(listItems[i]))
            writers[i].WriteLine(line);

你的状态会很好。

我不明白你用IST处理0的意思。你是说领先0?也许你可以澄清一下。我告诉它我想匹配包含00001的文件或包含GH00XH的文件,它会给我匹配0000203000009、GH12200等的所有内容…@Rubens:是的,看起来你们是在同一时间编辑的。我也是,但接到通知后就退出了,直到看起来你们都完蛋了。我做的不仅仅是一点格式化,但是…np@John,有时会发生=@Mike,你能编辑你的问题来添加一个样本行和你的实际列表项值吗?