如何准确检测DirectoryInfo列表中含指定存档槽名的目录?
解决Unity存档目录精准匹配问题
原代码使用DirectoryInfo.FullName.Contains匹配存档目录时,会出现误匹配(比如找SaveSlot1时,会命中SaveSlot10、SaveSlot11这类包含"SaveSlot1"字符串的目录),用正则表达式实现精准匹配是完全可行的方案,具体实现和优势如下:
正则匹配实现示例
针对指定的saveSlotNumber,构造匹配完整目录名的正则表达式,确保只匹配完全符合命名规则的存档目录:
using System.Text.RegularExpressions; using System.IO; // 假设当前要加载的存档槽编号 int saveSlotNumber = 1; // 构造正则模式:^表示开头,$表示结尾,确保目录名完全匹配 string matchPattern = $"^SaveSlot{saveSlotNumber}$"; Regex slotRegex = new Regex(matchPattern, RegexOptions.IgnoreCase); // 获取Saved Games目录路径 string savedGamesPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "Saved Games"); DirectoryInfo savedGamesDir = new DirectoryInfo(savedGamesPath); // 遍历子目录寻找匹配项 foreach (DirectoryInfo slotDir in savedGamesDir.GetDirectories()) { if (slotRegex.IsMatch(slotDir.Name)) { // 找到目标存档目录,执行加载逻辑 LoadSaveFromDirectory(slotDir.FullName); break; } }
方案优势
- 精准性:正则中的
^和$锚点确保匹配的是完整目录名,彻底避免了包含式匹配带来的误判问题。 - 灵活性:如果后续存档命名规则调整(比如加入前缀/后缀标识),只需修改正则模式即可适配,扩展性更强。
补充:更简洁的替代方案
如果存档目录命名规则固定(始终是SaveSlot+数字),也可以直接用字符串相等判断,代码更简洁:
if (slotDir.Name == $"SaveSlot{saveSlotNumber}") { // 加载逻辑 }
内容的提问来源于stack exchange,提问作者Daniel Lip
相关产品推荐
相关产品推荐

