web-dev-qa-db-fra.com

Comment copier un fichier dans un autre chemin?

J'ai besoin de copier un fichier dans un autre chemin, en laissant l'original à son emplacement actuel.

Je veux aussi pouvoir renommer le fichier.

La méthode FileInfo CopyTo fonctionnera-t-elle?

44
mrblah

Regardez File.Copy ()

À l'aide de File.Copy, vous pouvez spécifier le nouveau nom de fichier dans la chaîne de destination.

Donc quelque chose comme 

File.Copy(@"c:\test.txt", @"c:\test\foo.txt");

Voir aussi Procédure: copier, supprimer et déplacer des fichiers et des dossiers (Guide de programmation C #)

74
Adriaan Stander

J'ai essayé de copier un fichier XML d'un emplacement à un autre. Voici mon code:

public void SaveStockInfoToAnotherFile()
{
    string sourcePath = @"C:\inetpub\wwwroot";
    string destinationPath = @"G:\ProjectBO\ForFutureAnalysis";
    string sourceFileName = "startingStock.xml";
    string destinationFileName = DateTime.Now.ToString("yyyyMMddhhmmss") + ".xml"; // Don't mind this. I did this because I needed to name the copied files with respect to time.
    string sourceFile = System.IO.Path.Combine(sourcePath, sourceFileName);
    string destinationFile = System.IO.Path.Combine(destinationPath, destinationFileName);

    if (!System.IO.Directory.Exists(destinationPath))
       {
         System.IO.Directory.CreateDirectory(destinationPath);
       }
    System.IO.File.Copy(sourceFile, destinationFile, true);
}

Puis j'ai appelé cette fonction dans une fonction timer_elapsed d'un certain intervalle que je pense que vous n'avez pas besoin de voir. Ça a marché. J'espère que cela t'aides.

7
Sajib Mahmood

Oui. Cela fonctionnera: FileInfo.CopyTo, méthode

Utilisez cette méthode pour autoriser ou empêcher le remplacement d’un fichier existant. Utilisez la méthode CopyTo pour empêcher le remplacement d'un fichier existant par défaut.

Toutes les autres réponses sont correctes, mais puisque vous avez demandé FileInfo, voici un exemple:

FileInfo fi = new FileInfo(@"c:\yourfile.ext");
fi.CopyTo(@"d:\anotherfile.ext", true); // existing file will be overwritten
6
Rubens Farias

Vous pouvez également utiliser File.Copy pour copier et File.Move pour le renommer.

// Copy the file (specify true or false to overwrite or not overwrite the destination file if it exists.
File.Copy(mySourceFileAndPath, myDestinationFileAndPath, [true | false]);

// EDIT: as "astander" notes correctly, this step is not necessary, as File.Copy can rename already...
//       However, this code could be adapted to rename the original file after copying
// Rename the file if the destination file doesn't exist. Throw exception otherwise
//if (!File.Exists(myRenamedDestinationFileAndPath))
//    File.Move(myDestinationFileAndPath, myRenamedDestinationFileAndPath);
//else
//    throw new IOException("Failed to rename file after copying, because destination file exists!");

MODIFIER
Commenté le code "renommer", car File.Copy peut déjà copier et renommer en une étape, comme astander l’a noté correctement dans les commentaires.

Toutefois, le code de changement de nom pourrait être adapté si l’opérateur souhaitait renommer le fichier source après sa copie dans un nouvel emplacement.

4
Thorsten Dittmar

File :: Copy va copier le fichier dans le dossier de destination et File :: Move peut à la fois déplacer et renommer un fichier.

2
A9S6
string directoryPath = Path.GetDirectoryName(destinationFileName);

// If directory doesn't exist create one
if (!Directory.Exists(directoryPath))
{
DirectoryInfo di = Directory.CreateDirectory(directoryPath);
}

File.Copy(sourceFileName, destinationFileName);
2
Kiran k g

C'est ce que j'ai fait pour déplacer un fichier de test des téléchargements sur le bureau. J'espère que c'est utile.

private void button1_Click(object sender, EventArgs e)//Copy files to the desktop
    {
        string sourcePath = @"C:\Users\UsreName\Downloads";
        string targetPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
        string[] shortcuts = {
            "FileCopyTest.txt"};

        try
        {
            listbox1.Items.Add("Starting: Copy shortcuts to dektop.");
            for (int i = 0; i < shortcuts.Length; i++)
            {
                if (shortcuts[i]!= null)
                {
                    File.Copy(Path.Combine(sourcePath, shortcuts[i]), Path.Combine(targetPath, shortcuts[i]), true);                        
                    listbox1.Items.Add(shortcuts[i] + " was moved to desktop!");
                }
                else
                {
                    listbox1.Items.Add("Shortcut " + shortcuts[i] + " Not found!");
                }
            }
        }
        catch (Exception ex)
        {
            listbox1.Items.Add("Unable to Copy file. Error : " + ex);
        }
    }        
0
user2673536