tags:

views:

120

answers:

7

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?

+4  A: 
System.IO.File.Copy(oldPathAndName, newPathAndName);
Marc Gravell
+3  A: 

Use the File.Copy method instead

eg.

File.Copy(existingfile, newfile);

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

w69rdy
Would whoever downvoted it care to elaborate??
w69rdy
+7  A: 

You may also try the Copy method:

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

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...

Shekhar
you wouldn't need a reader/writer for that - just the stream would be fine. Also; NTFS alternative streams and things like audit/security won't be copied if you just copy the (default) stream.
Marc Gravell
@March Gravell,Thanks for your inputs. I dont know much about NTFS alternative streams.. guess need to learn about it.
Shekhar
+1  A: 

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

Martin Hyldahl
+3  A: 

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");
Manish
+4  A: 

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