96 votes

File.Move ne fonctionne pas - le fichier existe déjà

J'ai un dossier :

c : \test

J'essaie ce code :

File.Move(@"c:\test\SomeFile.txt", @"c:\test\Test");

Je reçois l'exception :

Le fichier existe déjà

Le répertoire de sortie existe bel et bien et le fichier d'entrée s'y trouve.

2 votes

Si le fichier d'entrée se trouve déjà dans le répertoire de sortie, alors le fichier existe déjà, ce qui explique l'exception. Vous devez indiquer que vous voulez le fichier original écrasé par le nouveau.

11 votes

On dirait que l'erreur vous dit exactement ce qui ne va pas.

0 votes

@Josh Non. Il semble que Windows ait un comportement de système de fichiers non-POSIX qui rend impossible l'élaboration d'un modèle/routine de mise à jour de fichier transactionnel simple et portable.

11voto

Pawel Czapski Points 1339

Si le fichier existe vraiment et que vous voulez le remplacer, utilisez le code ci-dessous :

string file = "c:\test\SomeFile.txt"
string moveTo = "c:\test\test\SomeFile.txt"

if (File.Exists(moveTo))
{
    File.Delete(moveTo);
}

File.Move(file, moveTo);

4voto

Ekkehard.Horner Points 19117

Selon les documents relatifs à File.Move il n'y a pas de paramètre "overwrite if exists". Vous avez essayé de spécifier la destination dossier mais vous devez fournir la spécification complète du fichier.

En relisant la documentation ("fournir l'option de spécifier un nouveau nom de fichier"), je pensez à l'ajout d'une barre oblique inverse à la spécification du dossier de destination peut fonctionner.

2voto

Mark Points 21

Essayez Microsoft.VisualBasic.FileIO.FileSystem.MoveFile(Source, Destination, True) . Le dernier paramètre est le commutateur d'écrasement, qui System.IO.File.Move n'a pas.

2voto

Yaw Points 11

Si vous n'avez pas la possibilité de supprimer le fichier existant dans le nouvel emplacement, mais que vous devez quand même le déplacer et le supprimer de l'emplacement d'origine, cette astuce de renommage peut fonctionner :

string newFileLocation = @"c:\test\Test\SomeFile.txt";

while (File.Exists(newFileLocation)) {
    newFileLocation = newFileLocation.Split('.')[0] + "_copy." + newFileLocation.Split('.')[1];
}
File.Move(@"c:\test\SomeFile.txt", newFileLocation);

Cela suppose que le seul '.' du nom de fichier se trouve avant l'extension. Elle divise le fichier en deux avant l'extension et attache "_copy." entre les deux. Cela vous permet de déplacer le fichier, mais crée une copie si le fichier existe déjà ou une copie de la copie existe déjà, ou une copie de la copie de la copie existe... ;)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X