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

文件隐藏属性导致File.Copy抛出UnauthorizedAccessException异常

这是Windows和.NET的预期行为,并非bug

这个现象是Windows文件系统权限模型和.NET File.Copy()方法的既定设计,不是长期存在的bug,核心原因如下:

  • .NET的File.Copy()底层调用Windows原生的CopyFileEx等Win32 API,这些API默认会拦截对带有Hidden属性的目标文件的覆盖操作。这是Windows文件系统的防护逻辑:隐藏文件通常被标记为"不应被意外修改"的对象,因此覆盖操作需要显式处理属性后才能执行,和权限不足、只读属性的限制逻辑完全独立。
  • 该行为和Windows资源管理器的操作逻辑一致:在资源管理器中尝试覆盖隐藏文件时,系统会弹出确认对话框而非直接执行,本质是同一个底层规则的体现。
  • 虽然早期.NET官方文档未明确标注这个细节,但该行为从.NET Framework 2.0时代就存在,一直延续到.NET 8等新版本,属于跨版本的既定设计。

解决方案:显式处理隐藏属性

如果需要自动覆盖隐藏文件,可以在复制前先移除目标文件的隐藏属性,完成复制后按需恢复:

string sourcePath = @"C:\source.txt";
string targetPath = @"C:\target_hidden.txt";

// 获取目标文件当前属性
var targetAttrs = File.GetAttributes(targetPath);

// 移除隐藏属性(如果存在)
if ((targetAttrs & FileAttributes.Hidden) != 0)
{
    File.SetAttributes(targetPath, targetAttrs & ~FileAttributes.Hidden);
}

// 执行覆盖复制
File.Copy(sourcePath, targetPath, overwrite: true);

// 恢复目标文件原有的隐藏属性(可选)
File.SetAttributes(targetPath, targetAttrs);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 13:55:53