使用C ++进行C:\文件扫描,拒绝访问特定文件

时间:2014-06-07 08:59:07

标签: c++ windows

好的,所以我编写了一个带有递归函数的代码,用于扫描我的(或任何其他)C:\盘。 使用chdir()我将活动目录更改为C:\并使用系统(&#34; dir&gt;&gt; C:\ Test \&#34; filename&#34;)来获取其中的文件用.txt编写的目录,然后读取它以了解我的内容。之后,我使用temp.substr("<DIR>")检查其他目录,并再次使用该特定目录的更长路径调用该函数。

代码本身可以正常运行,但我已经运行了一些我无法访问的目录,例如管理员或Windows中的特定文件夹。我在他们周围找到的唯一方法是在代码中添加exeptions,以便它只是避免这些文件夹。我想知道是否有办法获取我无法访问cmd的文件夹/文件列表,因为它可以使我的代码更精确或者是访问这些目录的方法

2 个答案:

答案 0 :(得分:1)

虽然C ++文件API对文件权限没有任何了解,而当您尝试读取您没有权限的文件时,C ++文件API也无法理解,但C ++确实可以访问Windows API。 Windows API是系统调用,使您可以访问本机操作系统功能,例如对GetFileSecurity的调用。

请注意,使用Windows API意味着如果要在非Windows平台上运行它,您的代码需要采取额外步骤来确保可移植性。

答案 1 :(得分:0)

进程(您的程序)以某些权限运行,通常是用户权限。 Windows中的访问权限并不像“管理员是上帝”那么简单。即使您的用户帐户是“管理员”组的成员,也不能简单地访问所有内容。通常取决于文件系统对象的OWNER是否授予其他组和用户特权。

“管理员”组的成员可能可以通过覆盖安全设置来获取访问权限,但我会建议不要这样做。

您可能需要提升权限,甚至可能需要在SYSTEM帐户下运行您的应用程序,这在很大程度上取决于您要实现的目标。

有关详细信息,我建议您阅读“安全API的最佳做法”:

http://msdn.microsoft.com/en-us/library/windows/desktop/ms717796(v=vs.85).aspx

特别是“以特殊权限运行”一章。