Мне нужно скопировать все файлы из одной папки (Source)
в другую папку (Destination)
. Мне также нужно сравнить две папки и увеличить счетчик, который останавливается на 100, если содержимое двух папок точно совпадает только с именами.Как сравнить файлы в двух разных папках и выполнить условное копирование
Мне не нужно сравнивать размер каждого файла, просто имена.
Это то, что я пробовал, но я не получаю результат желания, как описано выше.
я ссылка некоторых ресурсов здесь: http://msdn.microsoft.com/en-us/library/bb546137.aspx
class Program
{
class FileCompare : System.Collections.Generic.IEqualityComparer<System.IO.FileInfo>
{
public FileCompare() { }
public bool Equals(System.IO.FileInfo f1, System.IO.FileInfo f2)
{
return (f1.Name == f2.Name &&
f1.Length == f2.Length);
}
public int GetHashCode(System.IO.FileInfo fi)
{
string s = String.Format("{0}{1}", fi.Name, fi.Length);
return s.GetHashCode();
}
}
static void Main(string[] args)
{
int i = 1;
string sourcePath = @"C:\Users\Administrator\Desktop\Source";
string destinationPath = @"C:\Users\Administrator\Desktop\Dest";
string fileName = System.IO.Path.GetFileName(sourcePath);
string source = System.IO.Path.Combine(sourcePath, fileName);
string destination = System.IO.Path.Combine(destinationPath, fileName);
System.IO.DirectoryInfo dir1 = new System.IO.DirectoryInfo(sourcePath);
System.IO.DirectoryInfo dir2 = new System.IO.DirectoryInfo(destinationPath);
IEnumerable<System.IO.FileInfo> list1 = dir1.GetFiles("*.*",
System.IO.SearchOption.AllDirectories);
IEnumerable<System.IO.FileInfo> list2 = dir2.GetFiles("*.*",
System.IO.SearchOption.AllDirectories);
string[] files = System.IO.Directory.GetFiles(sourcePath);
foreach (string s in files)
{
fileName = System.IO.Path.GetFileName(s);
destination = System.IO.Path.Combine(destinationPath, fileName);
System.IO.File.Copy(s, destination, true);
FileCompare myFileCompare = new FileCompare();
bool areIdentical = list1.SequenceEqual(list2, myFileCompare);
while (areIdentical != true)
{
Console.WriteLine(i++);
}
}
Console.WriteLine("Press any key to exit.");
Console.ReadKey();
}
}
О, так близко. «но я не получаю результат желания, как описано выше» - но какой результат вы получаете, и как это отличается от того, что вы хотели, _специально? –
Я не уверен, что я рядом. :) Приращение не работает, и у меня возникают проблемы с булевой оценкой с использованием цикла while. Когда я запускаю вышеуказанный код, я получаю бесконечный цикл, кажется, что часть сравнения не работает. – Asynchronous
Я просто имел в виду, что вопрос был представлен «так близко» к совершенно (что редко встречается здесь на SO). Но в нем отсутствуют некоторые особенности; вы можете помочь людям в предоставлении хороших ответов, если вы предоставите эти детали. Пожалуйста, подробно расскажите, что происходит и как это отличается от того, что вы хотели. –