この記事は機械翻訳されています。英語版の記事を表示するには、[英語] のチェック ボックスをオンにしてください。また、テキストにマウス ポインターを合わせると、ポップアップ ウィンドウに英語のテキストを表示することもできます。
翻訳
英語

Directory.EnumerateFiles メソッド (String, String, SearchOption)

 

公開日: 2016年10月

指定されたパスにあるファイルのうち、検索パターンに一致するファイル名の列挙可能なコレクションを返します。オプションでサブディレクトリを検索対象にすることができます。

名前空間:   System.IO
アセンブリ:  mscorlib (mscorlib.dll 内)

public static IEnumerable<string> EnumerateFiles(
	string path,
	string searchPattern,
	SearchOption searchOption
)

パラメーター

path
Type: System.String

検索するディレクトリの相対パスまたは絶対パス。 この文字列の大文字と小文字は区別されません。

searchPattern
Type: System.String

path 内のファイル名と対応させる検索文字列。 このパラメーターには、有効なリテラル パスとワイルドカード (* および ?) の組み合わせを使用できます。 文字 (「解説」を参照) の組み合わせを使用できますが、正規表現はサポートしていません。

searchOption
Type: System.IO.SearchOption

検索操作に現在のディレクトリのみを含めるのか、またはすべてのサブディレクトリを含めるのかを指定する列挙値の 1 つ。

既定値は TopDirectoryOnly です。

戻り値

Type: System.Collections.Generic.IEnumerable<String>

指定した検索パターンおよびオプションに一致し、path で指定したディレクトリの中にあるファイルの完全名 (パスを含む) から成る列挙可能なコレクション。

Exception Condition
ArgumentException

path は長さゼロの文字列で、空白のみで構成されているか、または無効な文字を含んでいます。 無効な文字を照会するには、GetInvalidPathChars メソッドを使用します。

または

searchPattern には有効なパターンが含まれません。

ArgumentNullException

pathnull です。

-または-

searchPatternnull です。

ArgumentOutOfRangeException

searchOption は有効な SearchOption 値ではありません。

DirectoryNotFoundException

たとえば、マップされていないドライブへの参照など、path は無効です。

IOException

path はファイル名です。

PathTooLongException

指定されたパス、ファイル名、または結合は、システム定義の最大長を超えています。 たとえば、Windows ベースのプラットフォームでは、パスは 248 文字未満、ファイル名は 260 文字未満にする必要があります。

SecurityException

呼び出し元に、必要なアクセス許可がありません。

UnauthorizedAccessException

呼び出し元に、必要なアクセス許可がありません。

searchPattern can be a combination of literal and wildcard characters, but doesn't support regular expressions. The following wildcard specifiers are permitted in searchPattern.

Wildcard specifier

Matches

* (asterisk)

Zero or more characters in that position.

? (question mark)

Zero or one character in that position.

Characters other than the wildcard are literal characters. For example, the searchPattern string "*t" searches for all names in path ending with the letter "t". The searchPattern string "s*" searches for all names in path beginning with the letter "s".

System_CAPS_noteメモ

When you use the asterisk wildcard character in a searchPattern such as "*.txt", the number of characters in the specified extension affects the search as follows:

  • If the specified extension is exactly three characters long, the method returns files with extensions that begin with the specified extension. For example, "*.xls" returns both "book.xls" and "book.xlsx".

  • In all other cases, the method returns files that exactly match the specified extension. For example, "*.ai" returns "file.ai" but not "file.aif".

When you use the question mark wildcard character, this method returns only files that match the specified file extension. For example, given two files, "file1.txt" and "file1.txtother", in a directory, a search pattern of "file?.txt" returns just the first file, whereas a search pattern of "file*.txt" returns both files.

searchPattern cannot end in two periods ("..") or contain two periods ("..") followed by DirectorySeparatorChar or AltDirectorySeparatorChar, nor can it contain any invalid characters. You can query for invalid characters by using the GetInvalidPathChars method.

You can specify relative path information with the path parameter. Relative path information is interpreted as relative to the current working directory, which you can determine by using the M:System.IO.Directory.GetCurrentDirectory method.

The Overload:System.IO.Directory.EnumerateFiles and Overload:System.IO.Directory.GetFiles methods differ as follows: When you use Overload:System.IO.Directory.EnumerateFiles, you can start enumerating the collection of names before the whole collection is returned; when you use Overload:System.IO.Directory.GetFiles, you must wait for the whole array of names to be returned before you can access the array. Therefore, when you are working with many files and directories, Overload:System.IO.Directory.EnumerateFiles can be more efficient.

The returned collection is not cached; each call to the M:System.Collections.Generic.IEnumerable`1.GetEnumerator on the collection will start a new enumeration.

The following example shows how to retrieve all the text files in a directory and its subdirectories, and move them to a new directory. After the files are moved, they no longer exist in the original directories.

using System;
using System.IO;

namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            string sourceDirectory = @"C:\current";
            string archiveDirectory = @"C:\archive";

            try
            {
                var txtFiles = Directory.EnumerateFiles(sourceDirectory, "*.txt", SearchOption.AllDirectories);

                foreach (string currentFile in txtFiles)
                {
                    string fileName = currentFile.Substring(sourceDirectory.Length + 1);
                    Directory.Move(currentFile, Path.Combine(archiveDirectory, fileName));
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }
    }
}

The following example recursively enumerates all files that have a .txt extension, reads each line of the file, and displays the line if it contains the string "Microsoft".

using System;
using System.IO;
using System.Linq;

class Program
{
    static void Main(string[] args)
    {
        try
        {
            var files = from file in Directory.EnumerateFiles(@"c:\", "*.txt", SearchOption.AllDirectories)
                        from line in File.ReadLines(file)
                        where line.Contains("Microsoft")
                        select new
                        {
                            File = file,
                            Line = line
                        };

            foreach (var f in files)
            {
                Console.WriteLine("{0}\t{1}", f.File, f.Line);
            }
			Console.WriteLine("{0} files found.", files.Count().ToString());
        }
        catch (UnauthorizedAccessException UAEx)
        {
            Console.WriteLine(UAEx.Message);
        }
        catch (PathTooLongException PathEx)
        {
            Console.WriteLine(PathEx.Message);
        }
    }
}

ユニバーサル Windows プラットフォーム
10 以降で使用可能
.NET Framework
4.0 以降で使用可能
Silverlight
4.0 以降で使用可能
トップに戻る
表示: