2016-05-01 20 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つのファイル...私は手動でチェックしたときにマッチしたファイル名(例:tempフォルダ内およびファイル・リスト内の同じファイル名)でテスト【選択平等、すなわちをチェック:Path.GetFileName(file) == Path.GetFileName(copylist [i])はちょうど2のために満足していますファイルがあり、最終的には1つのファイルのみがFilelistに置き換えられますが、4つのファイルはすべてtempフォルダにあります。

私は間違っています。アドバイスをお願いします。

+0

@MaciejLosその更新を参照してくださいList.Please文字列。 – techno

答えて

1

あなたのプログラムのロジックはtempfilesFilelistの位置が関係しているという事実に依存し、そのxtempfilesfileの位置に対応します。これが機能するためには、あなたはifbreakを追加し、外部のループに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

関連する問題