我已经搜索了好几天了,现在想去读一个目录,然后根据目录中的文件名编辑一个文本文件,每个文件名替换另一行上的文本。我想出了下面的代码,但问题是它将所有行上的文本更改为第一个文件名。
DirectoryInfo dinfo1 = new DirectoryInfo(path);
FileInfo[] Files1 = dinfo1.GetFiles("*.*");
string text = File.ReadAllText("path/text.txt");
foreach (FileInfo file in Files1)
{
text = text.Replace("oldtext1", "path" + file.Name);
text = text.Replace("oldtext2", "path" + file.Name);
text = text.Replace("oldtext3", "path" + file.Name);
}
File.WriteAllText("path/text.txt", text);
注意:我在文件夹中有100个文件,并希望按照从头到尾的顺序或字母顺序将所有100个文件添加到文本中,因为新文件将被添加,我想保留订单。
答案 0 :(得分:2)
如果你的目标是用第一个文件名替换oldtext1
,用第二个文件夹替换oldtext2
,那么这应该很简单:
for (var i = 0; i < Files1.Length; i++)
{
text = text.Replace("oldtext" + (i+1), "path" + Files1[i].Name);
}
我们正在使用常规的for
循环,因为我们想要有一个Files1
数组的索引。然后我们通过将oldtext
与i+1
连接来构建要替换的字符串,然后将其替换为数组中的当前文件名。
因此,首次通过循环,我们将替换:
oldtext1 => filename1
第二次:
oldtext2 => filename2
所以没有:
oldtextn => filenamen
注意:我在文件夹中有100个文件,并希望按照从头到尾的顺序或字母顺序将所有100个文件添加到文本中,因为新文件将被添加,我想保留订单。
请注意,DirectoryInfo.GetFiles
返回的文件顺序不保证按任何特定顺序排列。在运行上述循环之前,您应该使用Array.Sort对它们进行排序。
答案 1 :(得分:0)
text.Replace("oldtext1", path + file.Name);
执行此操作后,下一个文件名将不会替换oldtext1
,与oldtext2
和oldtext3
相同,这就是为什么所有行都已更改为第一个文件名,我认为下面的代码会帮助你
text += file.FullName+Environment.NewLine;