babalae/better-genshin-impact · warning · FileNotFoundException

找不到原始 repo.json 文件

Error message

找不到原始 repo.json 文件

What it means

Thrown by RepoWebBridge.ClearUpdate when a recursive Directory.GetFiles(CenterRepoPath, 'repo.json', AllDirectories) returns no match. ClearUpdate copies the pristine repo.json over RepoUpdatedJsonPath to wipe local 'hasUpdate' edits. The FileNotFoundException is caught and shown as '清空更新标记失败'.

Source

Thrown at BetterGenshinImpact/Core/Script/WebView/RepoWebBridge.cs:205

        }
        catch (Exception ex)
        {
            await ThemedMessageBox.ErrorAsync(ex.Message, "信息更新失败");
            return false;
        }
    }
    
    public async Task<bool> ClearUpdate()
    {
        try
        {
            string? repoJsonPath = Directory
                .GetFiles(ScriptRepoUpdater.CenterRepoPath, "repo.json", SearchOption.AllDirectories)
                .FirstOrDefault();

            if (string.IsNullOrEmpty(repoJsonPath))
            {
                throw new FileNotFoundException("找不到原始 repo.json 文件");
            }

            string targetPath = ScriptRepoUpdater.RepoUpdatedJsonPath;

            File.Copy(repoJsonPath, targetPath, overwrite: true);

            return true;
        }
        catch (Exception ex)
        {
            await ThemedMessageBox.ErrorAsync($"清空更新标记失败: {ex.Message}", "操作失败");
            return false;
        }
    }

    // 设置新手引导标志位
    public bool SetGuideStatus(bool status)
    {

View on GitHub (pinned to a7cb36712d)

Solutions

  1. Re-run the repository update to restore repo.json under CenterRepoPath.
  2. Validate the repo folder layout (expect .../repo/repo.json) and report if the structure differs.
  3. If repo.json lives elsewhere, update ClearUpdate's search pattern or the repo manifest.
  4. Delete CenterRepoPath and re-clone from scratch to eliminate corruption.
Defensive patterns

Strategy: validation

Validate before calling

bool HasRepoJson() => Directory.Exists(ScriptRepoUpdater.CenterRepoPath) &&
    Directory.GetFiles(ScriptRepoUpdater.CenterRepoPath, "repo.json", SearchOption.AllDirectories).Length > 0;

Prevention

When it happens

Trigger: CenterRepoPath exists but the inner 'repo' subfolder (or the repo.json inside it) is missing — e.g. a partial/empty clone, a corrupted extraction, or the repo layout changed and repo.json moved. Distinct from 142/143 because the folder exists but the index file does not.

Common situations: Repo update was interrupted leaving an empty directory; user deleted repo.json manually; git clone succeeded but checkout left only metadata; repo schema migration removed the file.

Related errors


AI-assisted analysis of babalae/better-genshin-impact@a7cb36712d (2026-08-13). Data as JSON: /api/errors/dc316ecfcd750031. Report an issue: GitHub.