You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何准确检测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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 03:05:14