26

同じドライブ上のある場所から別の場所にディレクトリを移動しようとしています。「ファイルが既に存在する場合、ファイルを作成できません」というエラーが発生します。以下は私のコードです。

誰かがこれについて提案できますか?

        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);
        }
4

5 に答える 5

23

前の両方の回答が指摘したように、宛先ディレクトリは存在できません。コード内にディレクトリが存在しない場合はディレクトリを作成し、ディレクトリを移動しようとすると、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();
    }
}
于 2012-10-01T06:08:37.903 に答える
4

http://msdn.microsoft.com/en-us/library/system.io.directory.move.aspxから

「たとえば、c:\ mydirをc:\ publicに移動しようとしたときに、c:\ publicがすでに存在する場合、このメソッドはIOExceptionをスローします。destDirNameパラメーターとして「c:\ public\mydir」を指定する必要があります。その「mydir」は「c:\ public」の下に存在しないか、「c:\newdir」などの新しいディレクトリ名を指定してください。

于 2012-10-01T05:12:03.650 に答える
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

于 2012-10-01T06:11:31.240 に答える
2

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);
于 2012-10-01T06:12:43.480 に答える
0

あなたはただ呼び出すことができます

Microsoft.VisualBasic.FileIO.FileSystem.MoveDirectory(source, destination, true);

内部で行うことは、ターゲットディレクトリが存在しない場合はそれを作成し、ソースディレクトリのファイルを繰り返し処理してターゲットディレクトリに移動することです。そうすれば、「ファイルがすでに存在する場合はファイルを作成できない」という問題は発生しません。

参照として追加する必要がありMicrosoft.VisualBasicます。

于 2016-07-27T02:32:50.177 に答える