簡體   English   中英

使用Directory.Move時,該文件已存在時無法創建文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM