Невозможно создать файл, если этот файл уже существует при использовании Directory.Move
Я пытаюсь переместить каталог из одного места в другое место на том же диске. Я получаю сообщение " Невозможно создать файл, когда этот файл уже существует". Ниже мой код.
может ли кто-нибудь предложить на это?
string sourcedirectory = @"F:\source";
string destinationdirectory = @"F:\destination";
try
{
if (Directory.Exists(sourcedirectory))
{
if (Directory.Exists(destinationdirectory))
{
Directory.Move(sourcedirectory, destinationdirectory);
}
else
{
Directory.CreateDirectory(destinationdirectory);
Directory.Move(sourcedirectory, destinationdirectory);
}
}
}
catch (Exception ex)
{
log(ex.message);
}
Ответы
Ответ 1
Как указывалось в обоих предыдущих ответах, каталог назначения не может существовать. В вашем коде вы создаете каталог, если он не существует, а затем пытается переместить ваш каталог, метод Move создаст для вас каталог. Если каталог уже существует, вам необходимо удалить его или переместить.
Что-то вроде этого:
class Program
{
static void Main(string[] args)
{
string sourcedirectory = @"C:\source";
string destinationdirectory = @"C:\destination";
string backupdirectory = @"C:\Backup";
try
{
if (Directory.Exists(sourcedirectory))
{
if (Directory.Exists(destinationdirectory))
{
//Directory.Delete(destinationdirectory);
Directory.Move(destinationdirectory, backupdirectory + DateTime.Now.ToString("_MMMdd_yyyy_HHmmss"));
Directory.Move(sourcedirectory, destinationdirectory);
}
else
{
Directory.Move(sourcedirectory, destinationdirectory);
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
Console.ReadLine();
}
}
Ответ 2
Вам не нужно сначала создавать каталог, он будет генерировать исключение IO, если каталог назначения существует, метод Move
автоматически создает его для вас:
string sourcedirectory = @"F:\source";
string destinationdirectory = @"F:\destination";
if (Directory.Exists(sourcedirectory))
{
if (!Directory.Exists(destinationdirectory))
{
Directory.Move(sourcedirectory, destinationdirectory);
}
}
Дополнительная информация Directory.Move
:
http://msdn.microsoft.com/en-us/library/system.io.directory.move.aspx
Ответ 3
из http://msdn.microsoft.com/en-us/library/system.io.directory.move.aspx
"Этот метод генерирует исключение IOException, если, например, вы пытаетесь переместить c:\mydir в c:\public и c:\public уже существует. Вы должны указать" c:\public\mydir "как destDirName параметр, если" mydir "не существует в разделе" c:\public "или указать новое имя каталога, такое как" c:\newdir".
Ответ 4
По MSDN,
Этот метод генерирует исключение IOException, если, например, вы пытаетесь переместить c:\mydir в c:\public и c:\public уже существует.
Но в вашем методе вы создаете каталог назначения перед перемещением.
Итак, вам нужно изменить свой метод из
if (Directory.Exists(destinationdirectory))
{
Directory.Move(sourcedirectory, destinationdirectory);
}
else
{
Directory.CreateDirectory(destinationdirectory);
Directory.Move(sourcedirectory, destinationdirectory);
}
к
if (Directory.Exists(destinationdirectory))
{
//delete or rename
}
Directory.Move(sourcedirectory, destinationdirectory);
Ответ 5
Вы можете просто позвонить
Microsoft.VisualBasic.FileIO.FileSystem.MoveDirectory(source, destination, true);
Что он делает внутри, он создает целевой каталог, если он не существует, а затем он выполняет итерацию по файлам исходного каталога и перемещает их в целевой каталог. Таким образом, проблема "Невозможно создать файл, если этот файл уже существует" не будет.
Вам нужно добавить Microsoft.VisualBasic
в качестве ссылки.