Renomear um arquivo em c #

Como renomeio um arquivo usando c #?

Dê uma olhada no System.IO.File.Move , “mova” o arquivo para um novo nome.

System.IO.File.Move("oldfilename", "newfilename"); 
 System.IO.File.Move(oldNameFullPath, newNameFullPath); 

Você pode usar o File.Move para fazer isso.

No método File.Move, isso não replaceá o arquivo se já existir. E isso lançará uma exceção.

Então, precisamos verificar se o arquivo existe ou não.

 /* Delete the file if exists, else no exception thrown. */ File.Delete(newFileName); // Delete the existing file if exists File.Move(oldFileName,newFileName); // Rename the oldFileName into newFileName 

Ou rode-o com um try catch para evitar uma exceção.

Apenas adicione:

 namespace System.IO { public static class ExtendedMethod { public static void Rename(this FileInfo fileInfo, string newName) { fileInfo.MoveTo(fileInfo.Directory.FullName + "\\" + newName); } } } 

E depois…

 FileInfo file = new FileInfo("c:\test.txt"); file.Rename("test2.txt"); 
  1. Primeira solução

    Evite soluções System.IO.File.Move postadas aqui (resposta marcada incluída). Ele falha nas redes. No entanto, o padrão de cópia / exclusão funciona localmente e através de redes. Siga uma das soluções de movimentação, mas substitua-a por Copiar. Em seguida, use File.Delete para excluir o arquivo original.

    Você pode criar um método Renomear para simplificá-lo.

  2. Fácil de usar

    Use o assembly do VB em c #. Adicionar referência ao Microsoft.VisualBasic

    Então, para renomear o arquivo:

    Microsoft.VisualBasic.FileIO.FileSystem.RenameFile(myfile, newName);

    Ambos são cordas. Note que myfile tem o caminho completo. newName não. Por exemplo:

     a = "C:\whatever\a.txt"; b = "b.txt"; Microsoft.VisualBasic.FileIO.FileSystem.RenameFile(a, b); 

    A pasta C:\whatever\ agora conterá b.txt .

Você pode copiá-lo como um novo arquivo e, em seguida, excluir o antigo usando a class System.IO.File :

 if (File.Exists(oldName)) { File.Copy(oldName, newName, true); File.Delete(oldName); } 

NOTA: Neste código de exemplo, abrimos um diretório e procuramos por arquivos PDF com parênteses abertos e fechados no nome do arquivo. Você pode verificar e replace qualquer caractere no nome que desejar ou simplesmente especificar um novo nome usando as funções de substituição.

Existem outras maneiras de trabalhar com esse código para fazer renomeações mais elaboradas, mas minha principal intenção era mostrar como usar o File.Move para fazer uma renomeação em lote. Isso funcionou contra 335 arquivos PDF em 180 diretórios quando eu corri no meu laptop. Isso é estímulo do código de momento e há maneiras mais elaboradas de fazer isso.

 using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; namespace BatchRenamer { class Program { static void Main(string[] args) { var dirnames = Directory.GetDirectories(@"C:\the full directory path of files to rename goes here"); int i = 0; try { foreach (var dir in dirnames) { var fnames = Directory.GetFiles(dir, "*.pdf").Select(Path.GetFileName); DirectoryInfo d = new DirectoryInfo(dir); FileInfo[] finfo = d.GetFiles("*.pdf"); foreach (var f in fnames) { i++; Console.WriteLine("The number of the file being renamed is: {0}", i); if (!File.Exists(Path.Combine(dir, f.ToString().Replace("(", "").Replace(")", "")))) { File.Move(Path.Combine(dir, f), Path.Combine(dir, f.ToString().Replace("(", "").Replace(")", ""))); } else { Console.WriteLine("The file you are attempting to rename already exists! The file path is {0}.", dir); foreach (FileInfo fi in finfo) { Console.WriteLine("The file modify date is: {0} ", File.GetLastWriteTime(dir)); } } } } } catch (Exception ex) { Console.WriteLine(ex.Message); } Console.Read(); } } } 

Usar:

 Using System.IO; string oldFilePath = @"C:\OldFile.txt"; // Full path of old file string newFilePath = @"C:\NewFile.txt"; // Full path of new file if (File.Exists(newFilePath)) { File.Delete(newFilePath); } File.Move(oldFilePath, newFilePath); 

Esperançosamente! será útil para você. 🙂

  public static class FileInfoExtensions { ///  /// behavior when new filename is exist. ///  public enum FileExistBehavior { ///  /// None: throw IOException "The destination file already exists." ///  None = 0, ///  /// Replace: replace the file in the destination. ///  Replace = 1, ///  /// Skip: skip this file. ///  Skip = 2, ///  /// Rename: rename the file. (like a window behavior) ///  Rename = 3 } ///  /// Rename the file. ///  /// the target file. /// new filename with extension. /// behavior when new filename is exist. public static void Rename(this System.IO.FileInfo fileInfo, string newFileName, FileExistBehavior fileExistBehavior = FileExistBehavior.None) { string newFileNameWithoutExtension = System.IO.Path.GetFileNameWithoutExtension(newFileName); string newFileNameExtension = System.IO.Path.GetExtension(newFileName); string newFilePath = System.IO.Path.Combine(fileInfo.Directory.FullName, newFileName); if (System.IO.File.Exists(newFilePath)) { switch (fileExistBehavior) { case FileExistBehavior.None: throw new System.IO.IOException("The destination file already exists."); case FileExistBehavior.Replace: System.IO.File.Delete(newFilePath); break; case FileExistBehavior.Rename: int dupplicate_count = 0; string newFileNameWithDupplicateIndex; string newFilePathWithDupplicateIndex; do { dupplicate_count++; newFileNameWithDupplicateIndex = newFileNameWithoutExtension + " (" + dupplicate_count + ")" + newFileNameExtension; newFilePathWithDupplicateIndex = System.IO.Path.Combine(fileInfo.Directory.FullName, newFileNameWithDupplicateIndex); } while (System.IO.File.Exists(newFilePathWithDupplicateIndex)); newFilePath = newFilePathWithDupplicateIndex; break; case FileExistBehavior.Skip: return; } } System.IO.File.Move(fileInfo.FullName, newFilePath); } } 

Como usar esse código?

 class Program { static void Main(string[] args) { string targetFile = System.IO.Path.Combine(@"D://test", "New Text Document.txt"); string newFileName = "Foo.txt"; // full pattern System.IO.FileInfo fileInfo = new System.IO.FileInfo(targetFile); fileInfo.Rename(newFileName); // or short form new System.IO.FileInfo(targetFile).Rename(newFileName); } } 

Mover está fazendo o mesmo = Copiar e Excluir um antigo.

 File.Move(@"C:\ScanPDF\Test.pdf", @"C:\BackupPDF\" + string.Format("backup-{0:yyyy-MM-dd_HH:mm:ss}.pdf",DateTime.Now)); 

No meu caso, eu quero que o nome do arquivo renomeado seja único, então eu adiciono um carimbo de data e hora ao nome. Dessa forma, o nome do arquivo do log ‘antigo’ é sempre exclusivo:

  if (File.Exists(clogfile)) { Int64 fileSizeInBytes = new FileInfo(clogfile).Length; if (fileSizeInBytes > 5000000) { string path = Path.GetFullPath(clogfile); string filename = Path.GetFileNameWithoutExtension(clogfile); System.IO.File.Move(clogfile, Path.Combine(path, string.Format("{0}{1}.log", filename, DateTime.Now.ToString("yyyyMMdd_HHmmss")))); } } 

Eu não consegui encontrar a abordagem que combina comigo, então eu proponho a minha versão. Claro que precisa de input, tratamento de erros.

 public void Rename(string filePath, string newFileName) { var newFilePath = Path.Combine(Path.GetDirectoryName(filePath), newFileName + Path.GetExtension(filePath)); System.IO.File.Move(filePath, newFilePath); } 

Quando C # não tem algum recurso, eu uso C ++ ou C:

 public partial class Program { [DllImport("msvcrt", CallingConvention = CallingConvention.Cdecl, SetLastError = true)] public static extern int rename( [MarshalAs(UnmanagedType.LPStr)] string oldpath, [MarshalAs(UnmanagedType.LPStr)] string newpath); static void FileRename() { while (true) { Console.Clear(); Console.Write("Enter a folder name: "); string dir = Console.ReadLine().Trim('\\') + "\\"; if (string.IsNullOrWhiteSpace(dir)) break; if (!Directory.Exists(dir)) { Console.WriteLine("{0} does not exist", dir); continue; } string[] files = Directory.GetFiles(dir, "*.mp3"); for (int i = 0; i < files.Length; i++) { string oldName = Path.GetFileName(files[i]); int pos = oldName.IndexOfAny(new char[] { '0', '1', '2' }); if (pos == 0) continue; string newName = oldName.Substring(pos); int res = rename(files[i], dir + newName); } } Console.WriteLine("\n\t\tPress any key to go to main menu\n"); Console.ReadKey(true); } }