我正在尝试将目录从一个位置移动到同一个驱动器上的另一个位置。我收到“该文件已存在时无法创建文件”错误。以下是我的代码。
任何人都可以对此提出建议吗?
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);
}
答案 0 :(得分:19)
正如前面的两个答案所指出的那样,目标目录不能存在。在您的代码中,如果目录不存在,则创建目录,然后尝试移动目录,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();
}
}
答案 1 :(得分:4)
您不需要先创建目录,它会抛出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
答案 2 :(得分:3)
来自http://msdn.microsoft.com/en-us/library/system.io.directory.move.aspx
“如果您尝试将c:\ mydir移动到c:\ public,并且c:\ public已经存在,则此方法会抛出IOException。您必须将”c:\ public \ mydir“指定为destDirName参数,前提是“m:\ public”下不存在“mydir”,或指定新目录名称,例如“c:\ newdir”。“
答案 3 :(得分:2)
根据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);
答案 4 :(得分:0)
你可以打电话
Microsoft.VisualBasic.FileIO.FileSystem.MoveDirectory(source, destination, true);
它在内部的作用是创建目标目录(如果它不存在)然后迭代源目录的文件并将它们移动到目标目录。这样就不会发生“当该文件已存在时无法创建文件”的问题。
您需要添加Microsoft.VisualBasic
作为参考。