首页 > 解决方案 > 如何访问“系统卷信息”目录中的文件

问题描述

我正在尝试获取文件夹(或驱动器)内所有文件的列表。

Directory.GetFiles("C:\\", "*.*", SearchOption.AllDirectories)

抛出错误,因为对某些目录(如系统卷信息)的访问被拒绝。所有关于此的答案都建议捕获错误并绕过这些目录,而我的主要目的是绕过其他目录并阅读这些特殊目录。

我知道我可以授予访问权限,然后撤销访问权限,例如:

icacls "C:\System Volume Information" /grant username:F

icacls "C:\system volume information" /remove username

但仅运行 2 个进程(一个用于授予,一个用于撤销)访问每个目录似乎不是一个明智的选择System.UnauthorizedAccessException

有没有更好的方法以编程方式授予对此类目录的访问权限?

标签: c#

解决方案


我认为通常授予用户访问系统文件夹的权限并不是一个好主意。您的方法是搜索 C: 下的任何文件夹。这会产生各种问题,因为 MS 在那里创建的文件夹只有 SYSTEM 访问权限。如果您真的想访问所有内容,我建议您以 SYSTEM 身份运行您的应用程序。否则,请过滤掉您真正需要访问的文件夹,并仅尝试访问它们。关于如何以 SYSTEM 用户身份运行程序有多种解决方案。其中之一(我在测试时随便使用)是 PSTools。

https://docs.microsoft.com/en-us/sysinternals/downloads/pstools


推荐阅读