在C#中重命名目录


69

我在任何地方都找不到DirectoryInfo.Rename(To)或FileInfo.Rename(To)方法。因此,我写了我自己的文章,并把它发布在这里,以供任何需要的人使用,因为我们要面对现实:MoveTo方法过于强大,如果您只想重命名目录或文件,则总是需要额外的逻辑:

public static class DirectoryExtensions
{
    public static void RenameTo(this DirectoryInfo di, string name)
    {
        if (di == null)
        {
            throw new ArgumentNullException("di", "Directory info to rename cannot be null");
        }

        if (string.IsNullOrWhiteSpace(name))
        {
            throw new ArgumentException("New name cannot be null or blank", "name");
        }

        di.MoveTo(Path.Combine(di.Parent.FullName, name));

        return; //done
    }
}

Answers:


126

移动和重命名没有区别。您只需致电即可Directory.Move

通常,如果仅执行单个操作,则应使用和类中的static方法,而不要创建和对象。FileDirectoryFileInfoDirectoryInfo

有关使用文件和目录的更多建议,请参见此处


14
注重在切换情况下,像fooFoo将抛出IOException时,用一个简单的做Directory.Move既被视为相同的路径。所以有一个不同...只是说说而已。
卡巴拉


17

一个已经存在。如果无法克服System.IO名称空间的“移动”语法。Microsoft.VisualBasic.FileIO命名空间中有一个静态类,该类FileSystem中同时有一个和。RenameDirectoryRenameFile

正如SLaks提到的,这只是一个包装Directory.MoveFile.Move


9
他们所做的只是验证参数并调用Directory.MoveFile.Move。我检查了。
SLaks 2010年

4
是的,同意。我认为他的抱怨是因为“移动”并没有使您自动想到“重命名”。如果他想要语法,则该语法以该格式存在,仅存在于另一个名称空间中。
jsmith

移动意味着为任何Unix用户重命名:)
aloisdg移至codidact.com
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.