2015-07-16 6 views
0

Я искал высоко и низко в течение нескольких дней, чтобы увидеть, чтобы прочитать каталог, а затем отредактировать текстовый файл, основанный на именах файлов в каталоге, причем каждое имя файла заменяет текст на другой строке , Я придумал код ниже, но проблема в том, что он меняет текст на всех строках на первое имя файла.Как перейти к следующему файлу

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

Является ли ваш 'путь' концом'/'? и что означает ваш «старый текст»? –

+0

Посмотрите на метод [Path.Combine] (https://msdn.microsoft.com/en-us/library/system.io.path.combine (v = vs.110) .aspx), чтобы комбинировать пути, а не чем использование конкатенации строк. Он автоматически обрабатывает проблемы, такие как трейлинг-косые черты и т. П. –

+0

Мой конец pah с /, но путь не является проблемой, потому что он выполняется. Oldtext означает текст в файле, который я хочу изменить на имя файла. –

ответ

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, чтобы отсортировать их до запуска вышеуказанного цикла.

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

После этого действия, не будет никакого oldtext1 может быть заменена на следующее имя файла, равно oldtext2 и oldtext3, поэтому все линии были изменены на имя файла, я думаю, что ниже кода будет помочь вам

text += file.FullName+Environment.NewLine; 
Смежные вопросы