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

C#修改Windows 10 Pro文件时间后短时间自动回退为原始值问题求解

问题产生原因
  • 同步工具冲突:如果目标文件存放在OneDrive、百度云、坚果云等同步目录下,同步客户端会监测到文件元数据变更,自动从云端/本地备份恢复原始时间戳,是这类问题最常见的诱因。
  • 安全软件拦截:杀毒软件、Windows Defender实时保护等安全机制会监控文件元数据修改行为,判定为非可信操作时会自动回滚时间戳,避免恶意程序篡改操作痕迹。
  • 权限与系统保护限制:如果目标文件位于Program Files、Windows等系统保护目录,或者文件设置了只读、加密属性,无管理员权限时修改操作不会真正写入磁盘,仅临时显示修改后的缓存值。
  • 代码缓存问题:直接使用File静态方法修改时间戳后未刷新文件缓存,会出现临时显示修改成功、实际未写入的假生效现象。
解决方案

环境排查调整

  • 先将目标文件移动到非同步目录下(如非系统分区的自建文件夹),临时关闭所有同步客户端后重新运行程序测试,确认是否为同步工具导致的回滚。
  • 临时关闭杀毒软件、Windows Defender实时保护等安全防护功能,或将你的程序加入安全软件白名单后再测试。
  • 右键点击编译后的程序,选择「以管理员身份运行」,同时提前去除目标文件的只读属性,避免权限不足导致修改失败。

代码优化

将原有时间戳修改逻辑替换为以下代码,使用FileInfo实例操作+UTC时间赋值+强制刷新缓存,确保修改成功写入:

if (confirm.ToLower().Contains("y"))
{
    // 移除文件只读属性
    if (fileInfo.IsReadOnly)
    {
        fileInfo.IsReadOnly = false;
    }
    // 转换为UTC时间避免时区转换误差
    DateTime utcTime = dateTime.ToUniversalTime();
    // 直接修改FileInfo属性而非使用File静态方法,稳定性更高
    fileInfo.LastAccessTimeUtc = utcTime;
    fileInfo.CreationTimeUtc = utcTime;
    fileInfo.LastWriteTimeUtc = utcTime;
    // 强制刷新文件缓存,确保修改写入磁盘
    fileInfo.Refresh();
    Console.WriteLine("Changed date to <{0}> on file <{1}>.", fileInfo.FullName, fileInfo.LastWriteTime);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 03:36:04