Переименовать файл в C # - PullRequest
562 голосов
/ 10 июля 2010

Как переименовать файл с помощью C #?

Ответы [ 15 ]

866 голосов
/ 10 июля 2010

Взгляните на System.IO.File.Move , «переместите» файл под новым именем.

System.IO.File.Move("oldfilename", "newfilename");
123 голосов
/ 10 июля 2010
System.IO.File.Move(oldNameFullPath, newNameFullPath);
40 голосов
/ 05 января 2014

В методе File.Move он не будет перезаписывать файл, если он уже существует. И это вызовет исключение.

Итак, нам нужно проверить, существует файл или нет.

/* 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

Или окружите его пробным уловом, чтобы избежать исключения.

39 голосов
/ 10 июля 2010

Вы можете использовать File.Move, чтобы сделать это.

31 голосов
/ 16 января 2014

Просто добавьте:

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

А потом ...

FileInfo file = new FileInfo("c:\test.txt");
file.Rename("test2.txt");
20 голосов
/ 23 апреля 2014
  1. Первое решение

    Избегайте System.IO.File.Move решений, размещенных здесь (отмеченный ответ включен). Это терпит неудачу по сетям. Однако шаблон копирования / удаления работает локально и по сетям. Воспользуйтесь одним из решений для перемещения, но замените его на «Копировать». Затем используйте File.Delete для удаления исходного файла.

    Вы можете создать метод Rename, чтобы упростить его.

  2. Удобство использования

    Используйте сборку VB в C #. Добавить ссылку на Microsoft.VisualBasic

    Затем переименовать файл:

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

    Обе строки. Обратите внимание, что myfile имеет полный путь. newName не имеет. Например:

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

    Папка C:\whatever\ теперь будет содержать b.txt.

15 голосов
/ 11 сентября 2014

Вы можете скопировать его как новый файл, а затем удалить старый, используя класс System.IO.File:

if (File.Exists(oldName))
{
    File.Copy(oldName, newName, true);
    File.Delete(oldName);
}
6 голосов
/ 21 октября 2013

ПРИМЕЧАНИЕ: В этом примере кода мы открываем каталог и ищем файлы PDF с открытыми и закрытыми скобками в имени файла.Вы можете проверить и заменить любой символ в имени, которое вам нравится, или просто указать новое имя, используя функции замены.

Существуют и другие способы работы с этим кодом для более сложных переименований, но мое главное намерение состояло в том, чтобы показатькак использовать File.Move для пакетного переименования.Это работало против 335 файлов PDF в 180 каталогах, когда я запускал его на своем ноутбуке.Это подстегнуть момент кода, и есть более сложные способы сделать это.

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();
        }
    }
}
5 голосов
/ 10 апреля 2014

Использование:

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);
4 голосов
/ 22 сентября 2016

Надеюсь! это будет полезно для вас. :)

  public static class FileInfoExtensions
    {
        /// <summary>
        /// behavior when new filename is exist.
        /// </summary>
        public enum FileExistBehavior
        {
            /// <summary>
            /// None: throw IOException "The destination file already exists."
            /// </summary>
            None = 0,
            /// <summary>
            /// Replace: replace the file in the destination.
            /// </summary>
            Replace = 1,
            /// <summary>
            /// Skip: skip this file.
            /// </summary>
            Skip = 2,
            /// <summary>
            /// Rename: rename the file. (like a window behavior)
            /// </summary>
            Rename = 3
        }
        /// <summary>
        /// Rename the file.
        /// </summary>
        /// <param name="fileInfo">the target file.</param>
        /// <param name="newFileName">new filename with extension.</param>
        /// <param name="fileExistBehavior">behavior when new filename is exist.</param>
        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);
        }
    }

Как использовать этот код?

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