ファイル名に基づいて2つの異なるディレクトリのファイルリストを比較できる方法を書いています。 2番目のディレクトリに後で使用するリストには存在しません(これらのファイルをコピー/移動する別の方法を作成する可能性が高い)。C#名前に基づいてファイルのリストを比較してフルパスを返さない
ファイルのリスト(FilesRemaiingリスト)を見て、ファイルの完全なパスを取得しようとするまで、すべて正常に動作しているようです。それは私のビン/デバッグパスを指して終わる。
私の質問では、私は特にfile.FullNameではなく比較するfile.Nameを照会しているからだと思います。これは、FullNameがファイルと同様にパスを返すためです。これは、比較文(var FilesRemaining = FileList1.Except(FileList2).ToList();)には使用できません。
私の質問は、名前だけに基づいて2セットのファイルを比較する方法ですが、後でコピー/移動するために使用できる3番目のリストに例外リストの完全なパスを保存しますか?
はここに私の方法です:
public static List<string> CompareFiles(string ComparePath1, string ComparePath2)
{
List<string> FileList1 = new List<string>();
List<string> FileList2 = new List<string>();
List<string> CompareFileList = new List<string>();
DirectoryInfo directory1 = new DirectoryInfo(ComparePath1);
FileInfo[] files1 = directory1.GetFiles("*.*", SearchOption.TopDirectoryOnly);
DirectoryInfo directory2 = new DirectoryInfo(ComparePath2);
FileInfo[] files2 = directory2.GetFiles("*.*", SearchOption.TopDirectoryOnly);
//Queries the given directory for filenames
var query1 = from file in files1
where (!file.Attributes.HasFlag(FileAttributes.Hidden))
select (file.Name);
foreach (var file in query1)
{
FileList1.Add(file);
}
var query2 = from file in files2
where (!file.Attributes.HasFlag(FileAttributes.Hidden))
select (file.Name);
foreach (var file in query2)
{
FileList2.Add(file);
}
var FilesRemaining = FileList1.Except(FileList2).ToList();
foreach (var file in FilesRemaining)
{
string fullFile = Path.GetFullPath(file);
CompareFileList.Add(fullFile);
Console.WriteLine(fullFile);
}
return CompareFileList;
}
あなたはFileList1&2 '一覧を作り、'してから 'Except'呼び出しのローカル等価演算子を使用したほうが良いだろうように思える:https://msdn.microsoft.com/en-us /library/bb300779(v=vs.110).aspxそして、最後にループのマイナーな調整をします。 –
zzxyz
実際には、Exceptの代わりにWhereの呼び出ししかできませんでした。 – zzxyz