C# 使用Directory.Move时,如果文件已存在,则无法创建该文件
我正在尝试将目录从同一驱动器上的一个位置移动到另一个位置。我收到“无法在文件已存在时创建该文件”错误。下面是我的代码 有人能提出这个建议吗C# 使用Directory.Move时,如果文件已存在,则无法创建该文件,c#,C#,我正在尝试将目录从同一驱动器上的一个位置移动到另一个位置。我收到“无法在文件已存在时创建该文件”错误。下面是我的代码 有人能提出这个建议吗 string sourcedirectory = @"F:\source"; string destinationdirectory = @"F:\destination"; try { if (Directory.Exists(sourcedirectory))
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);
}
从
例如,如果您试图将c:\mydir移动到c:\public,并且c:\public已经存在,则此方法引发IOException。您必须指定“c:\public\mydir”作为destDirName参数,前提是“c:\public”下不存在“mydir”,或者指定一个新的目录名,例如“c:\newdir”。正如前面两个答案所指出的那样,目标目录不能存在。在代码中,如果目录不存在,则创建目录,然后尝试移动目录,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();
}
}
您不需要先创建目录,它会抛出IO异常,如果目标目录存在,
Move
方法会自动为您创建它:
string sourcedirectory = @"F:\source";
string destinationdirectory = @"F:\destination";
if (Directory.Exists(sourcedirectory))
{
if (!Directory.Exists(destinationdirectory))
{
Directory.Move(sourcedirectory, destinationdirectory);
}
}
有关目录的更多信息。移动:
根据
例如,如果您尝试移动,此方法将引发IOException
c:\mydir到c:\public和c:\public已经存在
但是,在您的方法中,您正在移动之前创建目标目录
因此,您需要将您的方法从
if (Directory.Exists(destinationdirectory))
{
Directory.Move(sourcedirectory, destinationdirectory);
}
else
{
Directory.CreateDirectory(destinationdirectory);
Directory.Move(sourcedirectory, destinationdirectory);
}
到
你可以打个电话
Microsoft.VisualBasic.FileIO.FileSystem.MoveDirectory(source, destination, true);
它在内部所做的是,如果目标目录不存在,则创建目标目录,然后迭代源目录的文件并将其移动到目标目录。这样就不会出现“当文件已经存在时无法创建文件”的问题
您需要添加Microsoft.VisualBasic
作为参考。我尝试将目标设置为F:\destination\source,但出现了相同的错误。如果目标中存在文件,您希望如何覆盖?如果目标目录存在,此代码不会将源目录的文件移动到目标目录。
Microsoft.VisualBasic.FileIO.FileSystem.MoveDirectory(source, destination, true);