2011-07-25 137 views
4

我需要在目录中创建文件和子目录的完整列表。如何查找所有文件,包括隐藏文件和系统文件

DirectoryInfo.GetFiles()找不到所有文件;至少隐藏的文件似乎缺失。

(可能还存在权限问题,因为我无法使用Windows资源管理器查看某些目录,即使我以管理员身份运行,例如无法输入“C:\ System Volume Information” 。)

我使用C#中,Windows XP专业版

+1

无法查看“C:\ System Volume Inforamtion”文件夹,因为它仅分配给SYSTEM用户。为了看到它,你需要掌握它的所有权。但是,出于安全原因,不建议这样做。 –

+0

[C#的可能重复 - 获取不包含那些隐藏的文件的列表](http://stackoverflow.com/questions/2418270/c-sharp-get-a-list-of-files-excluding-those-that - 隐藏) – TarmoPikaro

回答

6

DirectoryInfo.GetFiles()返回全部文件(不包括那些您没有权限查看的文件)。

至少它确实包括隐藏文件,如this person who is asking almost exactly the reverse of this question所示。

你有没有出现在其他地方但不在此列表中的文件的特定示例?

+0

这是一个部分答案,但也请参阅上面的Alex关于权限和文件所有权的评论。 –

2

应该是的。尝试在其他目录中搜索,手动创建隐藏文件并查看它是否在搜索结果集中。

2

DirectoryInfo.GetFiles()返回所有文件,包括隐藏文件。

1

正如其他人所指出的,DirectoryInfo.GetFiles()获取所有文件。因此,看起来你可能会遇到许可问题。

3

在这么晚的日子里称重,GetFiles并不总是返回所有文件,我还没有弄清楚为什么。这里有一种方法来重现(至少在64位Windows 7 Home上,以管理员身份运行并在Visual Studio 2010中使用C#)。

herehttp://www.ftdichip.com/Drivers/D2XX.htm

此安装FTDI驱动程序可执行安装程序将在\ Windows \ System32下安装下列文件:

-ftbusui.dll 
-ftcserco.dll 
-ftd2xx.dll 
-FTLang.dll 
-ftserui2.dll 

下面的代码:

String[] files = Directory.GetFiles(Environment.SystemDirectory, "f*.*", SearchOption.TopDirectoryOnly); 

返回ftd2xx.dll,但不是其他四个文件。

将searchPattern更改为*。 *,或简单地使用:

GetFiles(Environment.SystemDirectory) 

回报ftd2xx.dll,而不是其他的四个文件。

没有任何文件被隐藏,所有五个文件都拥有相同的所有者和权限。所有五个文件都显示在Windows资源管理器和命令提示符窗口中。

事实上,以下返回false:

File.Exists(@"c:\Windows\System32\ftbusui.dll") 

和四个文件没有在打开文件对话框对话框中。作为管理员运行可执行文件没有区别,关闭UAC并没有帮助。

+0

我也遇到过这个问题。你找到了解决方案吗? –

+0

这只发生在非常特定的文件或各种各样的文件?看起来这可能是FTDI驱动程序的一个问题,试图以类似rootkit的方式隐藏驱动程序文件。 – NirIzr

相关问题