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

C#测试程序异常:sitemap.json文件内容无法更新

解决C#程序中sitemap.json内容无法更新的问题

可能的原因及解决方案

1. 文件写入未强制刷入磁盘(缓存导致)

Windows默认的文件缓存优化可能导致新写入内容未立即同步到磁盘,看起来像是旧数据残留。可以修改写入逻辑,强制绕过缓存直接写入磁盘:

private void WriteSitemap()
{
    var dirPath = @"d:\sitemap";
    Directory.CreateDirectory(dirPath);
    
    // 调试时输出序列化后的JSON,确认内容是否为最新
    var json = JsonSerializer.Serialize(Sitemap);
    Debug.WriteLine($"序列化内容:{json}");
    
    var filePath = Path.Combine(dirPath, "sitemap2.json");

    // 用FileStream强制写入磁盘,无需提前删除文件(FileMode.Create会直接覆盖)
    using (var fs = new FileStream(
        filePath, 
        FileMode.Create, 
        FileAccess.Write, 
        FileShare.None, 
        4096, 
        FileOptions.WriteThrough))
    using (var sw = new StreamWriter(fs, Encoding.UTF8))
    {
        sw.Write(json);
        sw.Flush();
        fs.Flush(true); // 强制将缓冲区内容刷入磁盘
    }

    var byteArray = GetScreenshotsZip();
    if (byteArray == null) return;
    var zipPath = Path.Combine(dirPath, "sitemap-screenshots.zip");
    File.WriteAllBytes(zipPath, byteArray);
}

2. 验证序列化逻辑是否正常

虽然你确认Sitemap对象内容正确,但可以额外验证序列化结果:

  • 替换序列化库测试,比如用Newtonsoft.Json替代System.Text.Json,排除序列化组件的潜在问题:
    var json = Newtonsoft.Json.JsonConvert.SerializeObject(Sitemap);
    
  • 将序列化后的json字符串输出到控制台或日志,确认每次运行的内容确实不同。

3. 检查Sitemap对象的生命周期

确认每次测试运行时,Sitemap对象是否被正确重置:

  • 如果Sitemap是静态变量,需确保每次测试前清空或重新实例化,避免复用旧数据。
  • 排查是否有其他代码在写入文件后,又修改Sitemap并回写旧内容。

4. 排查第三方工具干扰

部分杀毒软件、文件监控或备份工具可能拦截文件写入,甚至恢复旧版本:

  • 临时关闭杀毒软件或文件保护工具,重新运行测试。
  • 右键文件→属性→位置,确认文件实际存储路径是否和代码中的一致,避免系统重定向到虚拟存储区。

5. 验证文件内容真实性

用哈希工具对比文件内容和序列化字符串的哈希值:

  • 用PowerShell命令计算文件哈希:Get-FileHash "d:\sitemap\sitemap2.json"
  • 计算序列化后json字符串的哈希,确认两者是否一致:
    var jsonHash = System.Security.Cryptography.SHA256.Create().ComputeHash(Encoding.UTF8.GetBytes(json));
    
  • 若哈希一致,说明写入的是最新内容,问题出在文件查看工具的缓存;若不一致,说明写入过程被篡改。

内容的提问来源于stack exchange,提问作者Louis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 11:23:26