2
bool match = Regex.IsMatch(Path.GetFileName(Directory.GetFiles(string.Format(@"C:\apps\{0}\", app), "*.config").ToString()).ToLower(), "loggingconfiguration.config");

以下のコードを使用して構成をリストに配置し、それぞれをループして、"loggingconfiguration.config"またはのファイル名と一致する"*app*.config."かどうかを確認しましたこれは問題なく動作しますが、これが構成を処理する最良の方法であるかどうかはわかりませんシナリオ。

List<string> configFiles = Directory.GetFiles(string.Format(@"C:\apps\{0}\", app), "*.config").ToList<string>();

foreach (var item in configFiles)
{
    if (item.ToLower().Contains("loggingconfiguration.config") || (Path.GetFileName(item.ToLower()).Contains(app)))
    {
        //Do something
    }
}

"loggingconfiguration.config"orを"\*app*.config"最初に検索して、リストをループするステップを省く方法があるかどうかを知りたかったのです。`Path.GetFileName(Directory.GetFiles(string.Format(@"C:\apps{0}\", app), "*.config") 検索の system.string[] という結果が一番上に表示されます。

4

2 に答える 2

1

.NET 4 以降を使用していると仮定すると、次のことができます。

var files = new DirectoryInfo(string.Format(@"C:\apps\{0}\", app))
    .EnumerateFiles("*.config")
    .Where(x=>
        x.Name.Equals("loggingconfiguration.config", StringComparison.OrdinalIgnoreCase) ||
        x.Name.ToUpperInvariant().Contains("APP"));

それ以外の場合は次を使用しますGetFiles

var files = new DirectoryInfo(string.Format(@"C:\apps\{0}\", app))
    .GetFiles("*.config")
    .Where(x=>
        x.Name.Equals("loggingconfiguration.config", StringComparison.OrdinalIgnoreCase) ||
        x.Name.ToUpperInvariant().Contains("APP"));

EnumerateFilesそこに情報

于 2013-10-21T18:25:03.263 に答える
1

LINQ を使用して、IEnumerable を返すクエリを作成し、それを反復処理できます。

var configFiles = Directory.GetFiles(string.Format(@"C:\apps\{0}\", app), "*.config")
    .Where(p => p.ToLower().Contains("loggingconfiguration.config") || Path.GetFileName(p.ToLower()).Contains(app));

foreach (string s in configFiles)
{ 
    //dowork
}

これにより、フィルタリングの詳細の一部がソース コードから隠されますが、必ずしもパフォーマンスが向上するとは限りません。

于 2013-10-21T18:20:53.727 に答える