Невозможно создать файл, если этот файл уже существует при использовании каталога.Двигаться
Я пытаюсь перенести каталог с одного места в другое место на том же диске. Я получаю "не удается создать файл, так как он уже существует" ошибка. Ниже приведен мой код.
может ли кто-нибудь предложить это?
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);
}
5 ответов
Как указывалось в обоих предыдущих ответах, каталог назначения не может существовать. В коде вы создаете каталог, если он не существует, а затем пытаетесь переместить каталог, метод 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();
}
}
вам не нужно сначала создавать каталог, он вызовет исключение ввода-вывода, если целевой каталог существует,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
от 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"."
по состоянию на MSDN,
этот метод создает исключение IOException, если, например, вы пытаетесь переместить c:\mydir к c:\public, и c:\public уже существует.
но в вашем методе вы создаете целевой каталог перед перемещением.
Итак, вам нужно изменить свой способ от
if (Directory.Exists(destinationdirectory))
{
Directory.Move(sourcedirectory, destinationdirectory);
}
else
{
Directory.CreateDirectory(destinationdirectory);
Directory.Move(sourcedirectory, destinationdirectory);
}
to
if (Directory.Exists(destinationdirectory))
{
//delete or rename
}
Directory.Move(sourcedirectory, destinationdirectory);
Вы можете просто позвонить
Microsoft.VisualBasic.FileIO.FileSystem.MoveDirectory(source, destination, true);
что он делает внутренне, это создает целевой каталог, если он не существует, а затем перебирает файлы исходного каталога и перемещает их в целевой каталог. Таким образом, проблема "не может создать файл, когда этот файл уже существует" не произойдет.
вам нужно добавить Microsoft.VisualBasic
в качестве ссылки.