我如何重命名一个文件使用c# ?


当前回答

你可以将它复制为一个新文件,然后使用System.IO.File类删除旧文件:

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

其他回答

添加:

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");

没有一个答案提到编写一个单元可测试的解决方案。您可以使用system . io . abstractions,因为它为文件系统操作提供了可测试的包装,您可以使用它创建模拟文件系统对象并编写单元测试。

using System.IO.Abstractions;

IFileInfo fileInfo = _fileSystem.FileInfo.FromFileName("filePathAndName");
fileInfo.MoveTo(Path.Combine(fileInfo.DirectoryName, newName));

它已经过测试,它正在重命名文件的工作代码。

我遇到过一种情况,当我不得不在事件处理程序中重命名文件时,它会触发任何文件更改,包括重命名,并且要跳过永远重命名我必须重命名的文件,使用:

创建副本 移除原始的

File.Copy(fileFullPath, destFileName); // Both have the format of "D:\..\..\myFile.ext"
Thread.Sleep(100); // Wait for the OS to unfocus the file
File.Delete(fileFullPath);
private static void Rename_File(string FileFullPath, string NewName) // nes name without directory actualy you can simply rename with fileinfo.MoveTo(Fullpathwithnameandextension);
        {
            FileInfo fileInfo = new FileInfo(FileFullPath);
            string DirectoryRoot = Directory.GetParent(FileFullPath).FullName;

            string filecreator = FileFullPath.Substring(DirectoryRoot.Length,FileFullPath.Length-DirectoryRoot.Length);
             
            filecreator = DirectoryRoot + NewName;
            try
            {
                fileInfo.MoveTo(filecreator);
            }
            catch(Exception ex)
            {
                Console.WriteLine(filecreator);
                Console.WriteLine(ex.Message);
                Console.ReadKey();
            }

    enter code here
            // string FileDirectory = Directory.GetDirectoryRoot()

        }
System.IO.File.Move(oldNameFullPath, newNameFullPath);