【C#】Directory.EnumerateFilesとDirectory.GetFilesの違い

EnumerateFilesの名前からわかる通り、こちらはIEnumerable<string>が返ってくる。なので、遅延処理が可能となっている。

どんな時に使うべきかというと、扱うファイル数が多く、すべてのファイルに対して順序に関係なく何かしらの処理を実施するようなケースが想定される。

例えば、すべてのファイルのアクセス日時を変更する場合、以下のように書くことができる。

[TestMethod]
        public void UpdateFilesAccessTime()
        {
            // 指定されたディレクトリ配下のファイルパスを取得する動きは一緒。
            // ただ、遅延取得か即時取得かの違いがある。
            var files = Directory.GetFiles(_directoryPath);
            var enumeratefiles = Directory.EnumerateFiles(_directoryPath);
            var updateTime = DateTime.Now;
            foreach (var file in enumeratefiles)
            {
                File.SetLastAccessTime(file, updateTime);
            }
        }

ちなみに、アクセス日時を変更すると以下が変化する。

C#C#

Posted by takumioda