[英]Cannot create a file when that file already exists when using 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);
}
正如前面的兩個答案所指出的那樣,目標目錄不能存在。 在您的代碼中,如果目錄不存在,則創建目錄,然后嘗試移動目錄,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);
}
}
更多信息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
“例如,如果您嘗試將c:\\ mydir移動到c:\\ public,並且c:\\ public已經存在,則此方法會拋出IOException。您必須指定”c:\\ public \\ mydir“作為destDirName參數,提供“m:\\ public”下不存在“mydir”,或指定新目錄名稱,例如“c:\\ newdir”。“
根據MSDN ,
例如,如果您嘗試將c:\\ mydir移動到c:\\ public,並且c:\\ public已存在,則此方法將拋出IOException。
但是,在您的方法中,您將在移動之前創建目標目錄。
所以,你需要改變你的方法
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);
你可以打電話
Microsoft.VisualBasic.FileIO.FileSystem.MoveDirectory(source, destination, true);
它內部的作用是創建目標目錄(如果它不存在)然后迭代源目錄的文件並將它們移動到目標目錄。 這樣就不會發生“當該文件已存在時無法創建文件”的問題。
您需要添加Microsoft.VisualBasic
作為參考。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.