前回(以下のエントリー)のディレクトリ版を作ってみました。
ファイル名の変更を拡張メソッドで実装する - プログラマーな日々
ファイル名の変更が必要なケースは珍しくありませんが、System.IO.FileにもSystem.IO.FileInfoにも名前を変更するメソッドはありません。 そこで、ファイル名の変更を拡張メソッドでFileInfoに実装してみました。 ...
IOExtensions.cs
using System; using System.IO; namespace Extensions { public static class IOExtensions { /// <summary> /// ディレクトリの名前を変更します。 /// </summary> /// <param name="self">変更するディレクトリを示すDirectoryInfo。</param> /// <param name="newName">変更後の名前。</param> public static void Rename(this DirectoryInfo self, string newName) { if (File.Exists(self.FullName)) { throw new FileNotFoundException("指定されたパスはファイルです。path:" + self.FullName); } self.MoveTo(Path.Combine(self.Parent.FullName, newName)); } } }
IOExtensionsTest.cs
using System; using System.IO; using Extensions; using NUnit.Framework; namespace ExtensionsTest { [TestFixture] public class IOExtensionsTest { [Test] public void ディレクトリが存在しないときはエラー() { Assert.Throws<DirectoryNotFoundException>(() => new DirectoryInfo(@"c:\missing").Rename("new")); } [Test] public void ファイルの場合はエラー() { Exception ex = Assert.Throws<FileNotFoundException>(() => new DirectoryInfo(@"C:\old\old.txt").Rename("new")); StringAssert.StartsWith("指定されたパスはファイルです。", ex.Message); } [Test] public void リネーム() { new DirectoryInfo(@"C:\old").Rename("new"); Assert.IsTrue(Directory.Exists(@"C:\new")); } } }