c# - 如何访问“系统卷信息”目录中的文件
问题描述
我正在尝试获取文件夹(或驱动器)内所有文件的列表。
Directory.GetFiles("C:\\", "*.*", SearchOption.AllDirectories)
抛出错误,因为对某些目录(如系统卷信息)的访问被拒绝。所有关于此的答案都建议捕获错误并绕过这些目录,而我的主要目的是绕过其他目录并阅读这些特殊目录。
我知道我可以授予访问权限,然后撤销访问权限,例如:
icacls "C:\System Volume Information" /grant username:F
和
icacls "C:\system volume information" /remove username
但仅运行 2 个进程(一个用于授予,一个用于撤销)访问每个目录似乎不是一个明智的选择System.UnauthorizedAccessException
。
有没有更好的方法以编程方式授予对此类目录的访问权限?
解决方案
我认为通常授予用户访问系统文件夹的权限并不是一个好主意。您的方法是搜索 C: 下的任何文件夹。这会产生各种问题,因为 MS 在那里创建的文件夹只有 SYSTEM 访问权限。如果您真的想访问所有内容,我建议您以 SYSTEM 身份运行您的应用程序。否则,请过滤掉您真正需要访问的文件夹,并仅尝试访问它们。关于如何以 SYSTEM 用户身份运行程序有多种解决方案。其中之一(我在测试时随便使用)是 PSTools。
https://docs.microsoft.com/en-us/sysinternals/downloads/pstools
推荐阅读
- python - 为什么我的脚本不起作用,即使我以管理员身份运行它?
- google-sheets - 如何获取和修复具有#ERROR 的单元格的原始值
- javascript - WebdriverIO - 如何检索当前聚焦/选定/活动元素的 HTML?
- visual-studio-code - VS 代码 V1.31 emmet 智能感知不适用于 Python/Django 扩展
- angular - Angular Material 2:对标题使用不同的字体配置?
- mysql - 使用 aspx.cs 从 MySQL 获取返回值/参数
- embedded - 如何重新启动任务
- exit - Python:退出脚本
- c++ - 具有宽松内存顺序的 fetch_add 会返回唯一值吗?
- java - 如何在弹簧属性文件中使用嵌套的 java.reflect.Type