1

enumeratefiles を使用して、ディレクトリ内のすべてのファイルを一覧表示しています。不正な文字を含むファイル名に遭遇すると例外をスローし、ファイルをリストしている foreach ループを停止します。例外にもかかわらず、foreach ループでファイル名のリストを続行するにはどうすればよいですか? 何か案は?

コード:

try {

DirectoryInfo directory = new DirectoryInfo(targetPath);
IEnumerable<FileInfo> allfiles = directory.EnumerateFiles("*.*", SearchOption.AllDirectories);

foreach (FileInfo file in allfiles)
{
    Console.WriteLine(file.Name);
}

}
catch (ArgumentException o)
{
    Console.WriteLine("Error: {0}", o.Message);
}
4

1 に答える 1

2

foreachループの周りに try キャッチがあります。これは、ループ内の呼び出しのいずれかが失敗した場合、コードが残りのループを中止することを意味します。

コードを次のように変更します。

foreach (FileInfo file in allfiles)
{
    try
    {
        Console.WriteLine(file.Name);
    }
    catch (ArgumentException o)
    {
        Console.WriteLine("Error: {0}", o.Message);
    }
}

EnumerateFilesエラーがスローされる場合に備えて、まだ try ... catch が必要です。

于 2012-04-13T21:05:00.880 に答える