views:

354

answers:

3

Ok, so admittedly I'm pretty new to C#, but I couldn't find a DirectoryInfo.Rename(To) or FileInfo.Rename(To) method anywhere. It pissed me off, so I wrote my own, and I'm posting it here for anybody to use if they need it, because let's face it : the MoveTo methods are overkill and will always require extra logic if you just want to rename a directory or file :

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
    }
}
+12  A: 

You should move it:

Directory.Move(source, destination);
Rubens Farias
+6  A: 

There is no difference between moving and renaming; you should simply call Directory.Move.

In general, if you're only doing a single operation, you should use the static methods in the File and Directory classes instead of creating FileInfo and DirectoryInfo objects.

For more advice when working with files and directories, see here.

SLaks
No such method in any current .Net BCL.
codekaizen
@codekaizen: I made a mistake; I already corrected it.
SLaks
+3  A: 

One already exists. If you cannot get over the "Move" syntax of the System.IO namespace. There is a static class FileSystem within the Microsoft.VisualBasic.FileIO namespace that has both a RenameDirectory and RenameFile already within it.

jsmith
+1 holy crap, Batman!
Rubens Farias
All they do is validate parameters and call `Directory.Move` and `File.Move`. I checked.
SLaks
Yes, agreed. I think his complaint is because "Move" does not make you automatically think "Rename." If he wants the Syntax, it exists in that format, just in another namespace.
jsmith