如何在C#中按文件名或目录名查找指定JSON文件?
解决方案
你的问题出在搜索模式的匹配逻辑上:*Localization*只会匹配文件名中包含Localization字符串的文件,而En.json这类文件的文件名里没有Localization,只是存放在名为Localization的目录下,所以无法被匹配到。
要同时覆盖两种目标文件,需要分两步处理后合并结果:
- 搜索所有名为
Localization.json的文件 - 搜索所有位于
Localization目录下的.json文件
具体代码实现
// 1. 获取所有直接命名为 Localization.json 的文件 var localizationJsonFiles = Directory.GetFiles("/Projects", "Localization.json", SearchOption.AllDirectories); // 2. 获取所有名为 Localization 的目录,再遍历这些目录获取里面的 json 文件 var localizationDirs = Directory.GetDirectories("/Projects", "Localization", SearchOption.AllDirectories); var dirJsonFiles = new List<string>(); foreach (var dir in localizationDirs) { // 只取当前 Localization 目录下的 json 文件,如需包含子目录可改为 SearchOption.AllDirectories dirJsonFiles.AddRange(Directory.GetFiles(dir, "*.json", SearchOption.TopDirectoryOnly)); } // 合并两个结果集并去重(避免 Localization 目录下存在 Localization.json 时重复) var allTargetFiles = localizationJsonFiles.Union(dirJsonFiles).ToList();
代码说明
- 第一步用精确的文件名匹配
Localization.json,确保所有符合命名规则的文件被找到 - 第二步先定位所有
Localization目录,再在这些目录内搜索所有.json文件,覆盖目录下的多语言json文件 - 最后用
Union合并结果并自动去重,避免重复获取同一文件
内容的提问来源于stack exchange,提问作者Big boy
相关产品推荐
相关产品推荐

