如何移动到下一个文件

时间:2015-07-16 13:42:14

标签: c#

我已经搜索了好几天了,现在想去读一个目录,然后根据目录中的文件名编辑一个文本文件,每个文件名替换另一行上的文本。我想出了下面的代码,但问题是它将所有行上的文本更改为第一个文件名。

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个文件添加到文本中,因为新文件将被添加,我想保留订单。

2 个答案:

答案 0 :(得分:2)

如果你的目标是用第一个文件名替换oldtext1,用第二个文件夹替换oldtext2,那么这应该很简单:

for (var i = 0; i < Files1.Length; i++)
{
    text = text.Replace("oldtext" + (i+1), "path" + Files1[i].Name);
}

我们正在使用常规的for循环,因为我们想要有一个Files1数组的索引。然后我们通过将oldtexti+1连接来构建要替换的字符串,然后将其替换为数组中的当前文件名。

因此,首次通过循环,我们将替换:

oldtext1 => filename1

第二次:

oldtext2 => filename2

所以没有:

oldtextn => filenamen
  

注意:我在文件夹中有100个文件,并希望按照从头到尾的顺序或字母顺序将所有100个文件添加到文本中,因为新文件将被添加,我想保留订单。

请注意,DirectoryInfo.GetFiles返回的文件顺序不保证按任何特定顺序排列。在运行上述循环之前,您应该使用Array.Sort对它们进行排序。

答案 1 :(得分:0)

text.Replace("oldtext1", path + file.Name);

执行此操作后,下一个文件名将不会替换oldtext1,与oldtext2oldtext3相同,这就是为什么所有行都已更改为第一个文件名,我认为下面的代码会帮助你

text += file.FullName+Environment.NewLine;