shashi
shashi

Reputation: 4696

C# Copy a file to another location with a different name

If certain conditions are met, I want to copy a file from one directory to another WITHOUT deleting the original file. I also want to set the name of the new file to a particular value.

I am using C# and was using FileInfo class. While it does have CopyTo method. It does not give me the option to set the file name. And the MoveTo method while allowing me to rename the file, deletes the file in the original location.

What is the best way to go about this?

Upvotes: 66

Views: 158247

Answers (10)

AsifQadri
AsifQadri

Reputation: 2388

If you want to use only FileInfo class try this

             string oldPath = @"C:\MyFolder\Myfile.xyz";
             string newpath = @"C:\NewFolder\";
             string newFileName = "new file name";
             FileInfo f1 = new FileInfo(oldPath);
           if(f1.Exists)
             {
                if(!Directory.Exists(newpath))
                {
                    Directory.CreateDirectory(newpath); 
                }
                 f1.CopyTo(string.Format("{0}{1}{2}", newpath, newFileName, f1.Extension));
             }

Upvotes: 9

TGarrett
TGarrett

Reputation: 552

File.Copy(@"C:\oldFile.txt", @"C:\newFile.txt", true);

Please do not forget to overwrite the previous file! Make sure you add the third param., by adding the third param, you allow the file to be overwritten. Else you could use a try catch for the exception.

Regards, G

Upvotes: 3

Iain Ward
Iain Ward

Reputation: 9936

Use the File.Copy method instead

eg.

File.Copy(@"C:\oldFile.txt", @"C:\newFile.txt");

You can call it whatever you want in the newFile, and it will rename it accordingly.

Upvotes: 12

Sam
Sam

Reputation: 11

The easiest method you can use is this:

System.IO.File.Replace(string sourceFileName, string destinationFileName, string destinationBackupFileName);

This will take care of everything you requested.

Upvotes: 1

Paul Mathews
Paul Mathews

Reputation: 31

StreamReader reader = new StreamReader(Oldfilepath);
string fileContent = reader.ReadToEnd();

StreamWriter writer = new StreamWriter(NewFilePath);
writer.Write(fileContent);

Upvotes: 3

Manish
Manish

Reputation: 6286

One method is:

File.Copy(oldFilePathWithFileName, newFilePathWithFileName);

Or you can use the FileInfo.CopyTo() method too something like this:

FileInfo file = new FileInfo(oldFilePathWithFileName);
file.CopyTo(newFilePathWithFileName);

Example:

File.Copy(@"c:\a.txt", @"c:\b.txt");

or

FileInfo file = new FileInfo(@"c:\a.txt");
file.CopyTo(@"c:\b.txt");

Upvotes: 5

Martin Hyldahl
Martin Hyldahl

Reputation: 1658

You can use the Copy method in the System.IO.File class.

Upvotes: 1

Shekhar
Shekhar

Reputation: 11788

You can use either File.Copy(oldFilePath, newFilePath) method or other way is, read file using StreamReader into an string and then use StreamWriter to write the file to destination location.

Your code might look like this :

StreamReader reader = new StreamReader("C:\foo.txt");
string fileContent = reader.ReadToEnd();

StreamWriter writer = new StreamWriter("D:\bar.txt");
writer.Write(fileContent);

You can add exception handling code...

Upvotes: 0

Darin Dimitrov
Darin Dimitrov

Reputation: 1038730

You may also try the Copy method:

File.Copy(@"c:\work\foo.txt", @"c:\data\bar.txt")

Upvotes: 34

Marc Gravell
Marc Gravell

Reputation: 1062640

System.IO.File.Copy(oldPathAndName, newPathAndName);

Upvotes: 128

Related Questions