2010-10-07 14 views
44

Jeśli spełnione są określone warunki, chcę skopiować plik z jednego katalogu do drugiego, BEZ usuwania oryginalnego pliku. Chcę również ustawić nazwę nowego pliku na konkretną wartość.C# Skopiuj plik do innej lokalizacji o innej nazwie

Używam C# i używałem klasy FileInfo. Chociaż ma metodę CopyTo. Nie daje mi opcji ustawienia nazwy pliku. A metoda MoveTo, pozwalając mi zmienić nazwę pliku, usuwa plik z pierwotnej lokalizacji.

Jaki jest najlepszy sposób na rozwiązanie tego problemu?

Odpowiedz

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

pomocą metody zamiast

np File.Copy.

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

Możesz nazwać to, co chcesz w pliku newFile, i odpowiednio zmieni nazwę.

+1

Czy ktokolwiek downvoted to ostrożnie, aby opracować ?? – w69rdy

29

Można też spróbować metody Copy:

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

Można użyć metody File.Copy (oldFilePath, newFilePath) lub w inny sposób jest, przeczytaj plik za pomocą StreamReader na ciąg znaków, a następnie użyć StreamWriter napisać plik do docelowej lokalizacji.

Twój kod może wyglądać następująco:

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

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

Możesz dodać kod obsługi wyjątków ...

+0

nie potrzebujesz do tego czytnika/pisarza - po prostu strumień byłby w porządku. Również; Strumienie alternatywne NTFS i rzeczy takie jak audit/security nie zostaną skopiowane, jeśli skopiujesz (domyślnie) strumień. –

+0

@March Gravell, Dzięki za twoje dane wejściowe. Nie wiem wiele o alternatywnych strumieniach NTFS. Chyba trzeba się o tym dowiedzieć. – Shekhar

1

Można użyć metody Copy w klasie System.IO.File.

4

Jedną z metod jest:

File.Copy(oldFilePathWithFileName, newFilePathWithFileName); 

Albo można użyć metody FileInfo.CopyTo() zbyt coś takiego:

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

Przykład:

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

lub

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

Jeśli chcesz użyć tylko klasy FileInfo spróbować

   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)); 
      } 
2
StreamReader reader = new StreamReader(Oldfilepath); 
string fileContent = reader.ReadToEnd(); 

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

Pamiętaj tylko, że read.ReadToEnd() załaduje całą zawartość pliku do pamięci. Teoretycznie akceptowalny maksymalny rozmiar pliku to 2 GB, ale może to stanowić problem nawet w przypadku (względnie) mniejszych plików, zwłaszcza jeśli w przeciwnym razie proces ma zbyt mało pamięci. – Val

1

Najprostszy sposób można użyć to:

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

ta zadba o wszystko, czego wniosek.

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

Proszę nie zapomnieć, aby zastąpić poprzedni plik! Upewnij się, że dodajesz trzeci parametr., Dodając trzeci parametr, pozwalasz na nadpisanie pliku. W przeciwnym razie możesz użyć catch catch dla wyjątku.

Pozdrawiam, G

Powiązane problemy