Проблема, с которой вы здесь сталкиваетесь, заключается в том, что вы пытаетесь переместить файл в каталог, который уже содержит файл с таким именем.
Существует несколько вариантов, которые вы можете выбрать:
Вариант один
Проверьте, существует ли файл, прежде чем пытаться Move
foreach (var file in listBox1.Items)
{
// Only move the file if it doesn't already exist
if (!File.Exists(Path.Combine(destinationDirectory, Path.GetFileName(file))))
{
File.Move(file, destinationDirectory);
}
}
Вариант два
Всегда перезаписывать файл, еслиэто существует.Мы можем сделать это в два этапа: сначала вызвав File.Copy
с параметром "overwrite", установленным в true
, а затем вызвав File.Delete
, чтобы удалить файл в исходном местоположении:
foreach (var file in listBox1.Items)
{
// If the destination file already exists, overwrite it. Then delete the original
File.Copy(file, Path.Combine(destinationDirectory, Path.GetFileName(file)), true);
File.Delete(file);
}
Примечание: Еще одна вещь, которую вы можете сделать для предотвращения ошибок (в любом случае), это убедиться, что исходный файл существует, и что исходный каталог не совпадает скаталог назначения, прежде чем пытаться что-либо:
foreach (var file in listBox1.Items)
{
// Ensure that the file exists and that the source
// and destination directories are not the same
if (!(File.Exists(file)) ||
Path.GetDirectoryName(file).Equals(
destinationDirectory, StringComparison.OrdinalIgnoreCase))
{
continue; // Continue to the next loop iteration without doing anything
}
// Rest of loop code here...
}