Используйте эту функцию:
Примечание: Если вы разрабатываете веб-приложение и хотите сообщить об этом через Html, оно вам не поможет.Пожалуйста, прочитайте следующий раздел «Для веб-приложений»
Примечание 2: эта функция не проверяет внутренние папки.поэтому, если у вас есть вложенный путь, мы должны написать рекурсивную функцию.
public void Copy(string Source, string Destination)
{
string[] SourceFiles = System.IO.Directory.GetFiles(Source);
for (int i = 0; i < SourceFiles.Length; i++)
{
string DestinationFilePath = System.IO.Path.Combine(Destination, System.IO.Path.GetFileName(SourceFiles[i]));
if (System.IO.File.Exists(DestinationFilePath))
{
var DialogResult = MessageBox.Show($"File `{System.IO.Path.GetFileName(SourceFiles[i])}` Exists in the Destination. Are you want to overwrite this file ?", "File Exist !", MessageBoxButtons.YesNo);
if (DialogResult == DialogResult.Yes)
System.IO.File.Copy(SourceFiles[i], DestinationFilePath, true);
}
else
{
System.IO.File.Copy(SourceFiles[i], DestinationFilePath);
}
}
}
Для веб-приложения:
Вам действительно нужно взаимодействовать с пользователем.И это делает нашу работу более сложной, чем раньше.
Вы будете работать с сеансом, и вы должны отслеживать эту операцию.Я не знаю, какую технологию вы используете, но вы должны добавить ее в сеанс:
1-1 **Destination Folder**
1-2 **List of Duplicated SourceFiles**
Итак:
Следующим шагом является копирование не-дублированные файлы и добавленное дублирование в сеансе:
public void Copy(string Source, string Destination)
{
/// Set Session ....
Session["Destination"] = Destination;
List<string> DuplicatedFiles = new List<string>();
string[] SourceFiles = System.IO.Directory.GetFiles(Source);
for (int i = 0; i < SourceFiles.Length; i++)
{
string DestinationFilePath = System.IO.Path.Combine(Destination, System.IO.Path.GetFileName(SourceFiles[i]));
if (System.IO.File.Exists(DestinationFilePath))
{
// Add into Duplication List
DuplicatedFiles.Add(SourceFiles[i]);
}
else
{
System.IO.File.Copy(SourceFiles[i], DestinationFilePath);
}
}
/// Set Session .....
Session["DouplicatedFiles"] = DuplicatedFiles;
}
Код выше - псевдо, цель - Очистить.
Следующий шаг - показать результат копирования или дублирования:
Я не знаю, как вы хотите реализовать такое представление для ошибок дублирования, и оно не будет частью ответа,в любом случае вы можете позволить пользователю выбирать действие для каждого файлов отдельно или целых из них одновременно.
зависит от ваших предпочтений, которые у вас будутActionMethod (в MVC) или что-то еще в WebForm, которое будет выполнять следующие действия: (Если пользователь не хочет заменять файлы, действие легко забыть)
public void CopyDuplications(bool Overwrite)
{
if (!Overwrite)
return "OK";
else
{
string Destination = Session["Destination"] as string;
var DuplicatedFiles = Session["DouplicatedFiles"] as List<string>();
for (int i = 0; i< DuplicatedFiles.Count; i++)
{
string DestinationFilePath = System.IO.Path.Combine(Destination, System.IO.Path.GetFileName(DuplicatedFiles[i]));
System.IO.File.Copy(DuplicatedFiles[i], DestinationFilePath, true);
}
}
}