1

我需要获取 Windows 文件夹中项目(文件夹和文件)的数量。如果我应该包含隐藏的项目,我可以根据条件轻松地做到这一点。但是在我的程序中,我想获取用户可见的项目数!即,如果隐藏的项目在文件夹中可见,则应将其包括在计数中。如果隐藏的项目不可见,则不应包含它。

那么我怎么知道 Windows 机器上是否设置了“显示隐藏文件”属性。换句话说,有没有一种方法可以找到文件或目录是否对用户“真正隐藏”(视觉上)?

更新:我将重新打开这个问题。虽然这里的原始答案回答了我的问题,但在某种程度上它并不是万无一失的。

这是新的场景:

C驱动器中的某些文件(还没有其他任何地方)在视觉上是隐藏的,尽管它们的隐藏属性是假的(或未选中),奇怪的是。这些文件在可见时(从文件夹选项中)看起来像其他隐藏文件一样苍白,当我们在文件夹选项中设置“不显示隐藏文件”时(就像任何其他普通隐藏文件一样),它们会在视觉上隐藏。

我看到的机器中的那些文件是autoexec.batconfig.sys. C:\我在 Windows XP 机器和 Windows 7 机器上发现了这个。有没有办法识别这些文件?基本上,我试图获取目录中可见(视觉)文件的数量,而我的应用程序在尝试获取C:\. 发生的情况是应用程序计算了这两个文件(因为它的属性没有隐藏),但是从视觉的角度来看,它们通常是隐藏的,如下所示:

string[] f = Directory.GetFiles(path);

int count = 0;
foreach (string s in f)
{
    FileInfo i = new FileInfo(s);
    if ((i.Attributes & FileAttributes.Hidden) == 0)
        count++;
}

return count;

所以我认为唯一正确的方法是调用Shell API。我正在寻找一个好的入门者..

谢谢..

4

3 回答 3

2

有一个注册表项可以检查有关“显示隐藏文件”的全局标志Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Hidden- 请参阅http://www.pctools.com/guides/registry/detail/1007/

编辑:
请注意,还有另一个关于“显示系统文件”的设置称为ShowSuperHidden

于 2011-09-24T07:20:55.137 回答
2

此设置存储在注册表中,它位于:

User Key: [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\
Advanced]
Value Name: Hidden
Data Type: REG_DWORD (DWORD Value)
Value Data: (1 = show hidden, 2 = do not show)

访问此值的代码:

int hiddenValue = Registry.GetValue(@"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\","Hidden",2);

if(hiddenValue == 1)
{
   //Files not hidden
}
else
{
   //Files are hidden
}

注册表项详细信息

于 2011-09-24T07:24:02.587 回答
0

autoexec.bat在 C:\中config.sys是 Yahia 提到的系统文件, ShowSuperHidden设置。

这是检查文件是否为系统文件的方法。当文件属性为 HSA 时,表示已隐藏、系统和文件准备归档。下面是文件属性的列表。

File attributes: 

A = Files ready for archiving 

H = Hidden 

C = Compressed 

HC is two attributes = Hidden & Compressed 

R = Read-only 

S = System 

HSA is three attributes = Hidden, System & Files ready for archiving 

E = Encrypted 

Encrypted files and folders cannot be compressed. 

资料来源:http ://www.tomshardware.com/forum/115561-45-file-attribute

于 2012-07-30T06:44:39.110 回答