假设VS代码对应路径为E:\Projects\Web1,在VS用“发布Web”的方式发布后的路径为E:\Site\Web1。
在IIS新建2个站点,站点A指向E:\Projects\Web1,站点B指向E:\Site\Web1。

现在出现一个异常情况,站点B能正常下载123.xls,站点A下载时却提示错误:

System.UnauthorizedAccessException: 对路径“E:\Projects\Web1\Download\123.xls”的访问被拒绝。
   在 System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
   在 System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
   在 System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy)
   在 System.IO.FileStream..ctor(String path, FileMode mode)

站点A和站点B的目录和文件权限一模一样,特意为站点A增加了权限等还是无效,搜索了一下,最后找到了解决方法,把下载代码里面的
FileStream fs = File.Open(filePath, FileMode.Open)  
改为就可以下载了。
FileStream fs = File.Open(filePath, FileMode.Open, FileAccess.Read);

官方MSDN文档如下:

File.Open 方法 (String, FileMode)
打开指定路径上的 FileStream,具有读/写访问权限。

异常 UnauthorizedAccessException

path 指定了一个只读文件。
- 或 -
在当前平台上不支持此操作。
- 或 -
path 指定了一个目录。
- 或 -
调用方没有所要求的权限。
- 或 -
mode 为 Create,指定文件为隐藏文件。

这时候回过头再去看E:\Projects\Web1\Download\123.xls,果然是只读属性,
而E:\Site\Web1\Download\123.xls没有只读属性;

把E:\Projects\Web1\Download\123.xls的只读属性去掉,重新恢复刚开始的代码
FileStream fs = File.Open(filePath, FileMode.Open); 这时下载就正常。

总结,解决方法有2种:
1、把文件的只读属性去掉;
2、FileStream fs = File.Open(filePath, FileMode.Open)改用下面这行代码
FileStream fs = File.Open(filePath, FileMode.Open, FileAccess.Read);

.NET下载文件报错System.UnauthorizedAccessException的解决方法相关推荐

  1. C#文件拒绝访问。上传文件报错System.UnauthorizedAccessException: 对路径XXX的访问被拒绝。

    https://blog.csdn.net/you5552391/article/details/45245523 常详细信息: System.UnauthorizedAccessException: ...

  2. Linux上的Django项目,下载文件报错,编码格式错误解决

    1.Django中,下载文件,报编码错误,具体报错信息当时忘记记录了,这里只记录一下解决办法,网上大部分的解决方法都是说在/usr/lib/python3.6/site-packages目录底下新建一 ...

  3. golang os.Rename 移动文件 报错 invalid cross-device link 解决方法

    今天在写golang,os.Rename使用移动文件的时候,报错: invalid cross-device link. 翻译过来的意思是 "无效的跨设备连接". 原来是我的lin ...

  4. Windows用scp服务器下载文件报错No file or directionary

    问题描述 在Windows从命令行scp从linux服务器下载文件报错No file or directionary,查找相关的技术文档无果.其他问答里出现的错误基本为终端登录服务器后的下载文件报错, ...

  5. cadence SPB17.4 - allegro - CAM350_V10.7CN 引入槽孔(.rou)文件报错问题的优雅解决思路

    cadence SPB17.4 - allegro - CAM350_V10.7CN 引入槽孔(.rou)文件报错问题的优雅解决思路 文章目录 cadence SPB17.4 - allegro - ...

  6. Oracle 报错 28000原因和解决方法

    Oracle 报错 28000原因和解决方法 使用PLSQL登录Oracle数据库时提示"ORA-28000:这个帐号被锁定". 出现这个问题的原因是:在Oracle databa ...

  7. windows下 python 使用 pip 安装TA-Lib报错的原因及解决方法

    windows下 python 使用 pip 安装TA-Lib报错的原因及解决方法 问题环境 问题描述 问题原因 & 解决办法 问题环境 Windows 10 x64 .python 3.8. ...

  8. IDEA双击不报错打不开解决方法

    IDEA双击不报错打不开解决方法 今天破解IDEA时修改Edit Custom VM Option那里出现问题,可能是因为有中文路径的原因,也可能是参数设置错误导致IDEA打不开的问题,没有报错,点击 ...

  9. mysql source导入报错ERROR 1366的解决方法

    mysql source导入报错ERROR 1366的解决方法 参考文章: (1)mysql source导入报错ERROR 1366的解决方法 (2)https://www.cnblogs.com/ ...

最新文章

  1. Java使用简单工厂模式对面向接口编程模式的深度解耦实现
  2. 部分博客中的代码已放到了GitHub上,欢迎大家下载阅读!
  3. Android App 瘦身总结 第三章 代码混淆及优化
  4. matlab 判断元素索引_matlab – 获取矩阵中n个最大元素的索引
  5. 在windows xp下,一块网卡绑定多个ip
  6. 嘌呤含量高的食物大全
  7. PaddlePaddle(2)——数据获取与处理(以CV任务为主)
  8. java抛出代码,java异常之手动抛出与自动抛出代码实例解析
  9. 获取ip地址 域名获取与解析
  10. 大麦盒子显示服务器超时,大麦盒子卡顿怎么办?这几个方法可以快速解决
  11. 信号ctft频谱matlab,信号、系统分析与控制(MATLAB版)第4章连续信号的频域分析.ppt...
  12. [图形学]ASTC纹理压缩格式
  13. OEM和ODM的区别
  14. linux下查看进程占用网络,linux怎么查看进程占用端口
  15. 如何实现局域网时间同步
  16. 前端开发面试题及答案整理
  17. HCU500主轴编码器检测工具
  18. select函数的分析
  19. Instruments使用指南(二)--- 开始Instruments之旅
  20. ftp主动模式和被动模式的区别

热门文章

  1. 20210501:字符串与哈希表力扣专题学习记录
  2. html渐变显示动画效果,使用CSS transition和animation改变渐变状态
  3. java 表达式2004的值_javaSE习题 第三章 运算符、表达式和语句
  4. bootlogo画面制作和替换
  5. BOMTool更新到1.3.0.10
  6. 最全中文leetcode解题攻略:思路知识点代码都有,搞定AI大厂笔试
  7. 云知声今年要量产三款芯片,还公布了多模态AI芯片规划
  8. 前端利器!让AI根据手绘原型生成HTML | 教程+代码
  9. 百度研究院在硅谷新设两大实验室,三名AI科学家加盟
  10. BZOJ5092:[Lydsy1711月赛]分割序列(贪心,高维前缀和)