2016-05-01 3 views
1

У меня есть основной список файлов Filelist. Главный список содержит полные пути к файлу, и есть второй список copylist, который он пополняется путем извлечения содержимого из каталога. Мне нужно заменить файл Имена в Filelist, которые совпадают с именами во временной папке, поэтому я использовал следующий код.Замена совпадающих имен файлов в списке строк

Filelist = new List<string>(); 
//Code to Populate File List from openfiledialog 
try 
{ 
    copylist = Directory.GetFiles(temppath + @"\mydir\"); 

    List<string> tempfiles = new List<string>(Filelist); 
    int x = 0; 
    foreach (string file in tempfiles) 
    { 
     for (int i = 0; i < copylist .Length; i++) 
     { 
      if (Path.GetFileName(file) == Path.GetFileName(copylist [i])) 
      { 
       MessageBox.Show("Removed: " + file + " \ninserted:" + copylist [i]); 



       Filelist.RemoveAt(x); 

       Filelist.Insert(x,copylist [i]); 


      } 
      x++; 
     } 

    } 
} 
catch (Exception) 
{ 
} 

я тестировал с 4 файлов ... Имена файлов совпадающая, когда я проверил вручную (т.е. то же имя файла в папке временных и в FileList) .The проверки равенства, а именно: Path.GetFileName(file) == Path.GetFileName(copylist [i]) выполняется для всего 2 файлов и, наконец, только один файл заменяется на Filelist, хотя все 4 файла присутствуют в папке temp.

Что я делаю неправильно. Пожалуйста, совет.

+0

@MaciejLos Сво Струнное List.Please см обновления. – techno

ответ

1

Логика вашей программы опирается на тот факт, что позиции в tempfiles и Filelist связаны между собой, и что x соответствует положению file в tempfiles. Для того, чтобы это работал вам нужно добавить break внутри if, и двигаться x++ к внешнему контуру:

foreach (string file in tempfiles) { 
    for (int i = 0; i < copylist .Length; i++) { 
     if (Path.GetFileName(file) == Path.GetFileName(copylist [i])) { 
      MessageBox.Show($"Removed: {file}\ninserted:{copylist [i])}"; 
      Filelist.RemoveAt(x); 
      Filelist.Insert(x,copylist[i]); 
      break; // << Added 
     } 
    } 
    x++; // << Moved 
} 
+0

Спасибо .. он решил мою проблему :) – techno

Смежные вопросы