web-dev-qa-db-ja.com

既存のファイル名を変更する

ファイルを特定のフォルダーにコピーしてから名前を変更する次のコードがあります。その名前のファイルが既に存在する場合、次の例外が発生します。

Cannot create a file when that file already exists

ファイルを上書きして名前を変更する方法はありますか?または、古いものを削除してから名前を変更する必要がありますか?

ここに私のコードがあります:

 File.Copy(FileLocation, NewFileLocation, true);
 //Rename:
 File.Move(Path.Combine(NewFileLocation, fileName), Path.Combine(NewFileLocation, "File.txt"));               
11
user1016179

のみを使用してみてください:

if (File.Exists("newfilename"))
{
    System.IO.File.Delete("newfilename");
}

System.IO.File.Move("oldfilename", "newfilename");
25

1つの簡単なオプションは、ファイルが存在する場合は削除することです。

if (System.IO.File.Exists(newFile)) System.IO.File.Delete(newFile);
System.IO.File.Move(oldFile, newFile);

そのような何かが動作するはずです。

9
drew_w

正解です File.Move は、ファイル名がすでに存在する場合、IOExceptionをスローします。したがって、それを克服するために、移動前に簡単なチェックを実行できます。例えば.

if (File.Exists(destinationFilename))
{
    File.Delete(destinationFilename);
}
File.Move(sourceFilename, destinationFilename);
5
Brad Christie

例外をスローさせるのではなく、 File.Exists を使用する必要があります。その後、ファイルを上書きするか名前を変更する必要がある場合に処理できます。

3
Darren

ステップ1:最初のステップとして、ファイルをコピーする前にファイルが存在するかどうかを識別します。
File.Exists()メソッドを使用

ステップ2:ファイルが既に同じ名前で存在する場合、File.Delete()メソッドを使用して既存のファイルを削除します

ステップ3:File.Copy()メソッドを使用して、ファイルを新しい場所にコピーします。

ステップ4:新しくコピーしたファイルの名前を変更します。

これを試して:

string NewFilePath = Path.Combine(NewFileLocation, fileName);
if(File.Exists(NewFilePath))
{ 
File.Delete(NewFilePath);
}

//Now copy the file first
File.Copy(FileLocation, NewFileLocation, true);

//Now Rename the File
File.Move(NewFilePath, Path.Combine(NewFileLocation, "File.txt")); 
2