如何查找Windows文件夹中的项目是否真的对用户隐藏



我需要得到Windows文件夹中项目(文件夹和文件)的计数。我可以根据我是否应该包含隐藏道具的条件轻松地做到这一点。但是在我的程序中,我想要获得对用户可见的项目计数!也就是说,如果隐藏的项目在文件夹中是可视的,那么它应该包含在计数中。如果隐藏项不可见,则不应包含

我怎么知道是否显示隐藏文件属性在Windows计算机上设置。换句话说,是否有一种方法可以发现文件或目录是否"真正隐藏"?(视觉上)来自用户??

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

下面是新的场景:

C驱动器中的某些文件(不是其他任何地方)在视觉上都是隐藏的,尽管它们的隐藏属性为false(或未检查),奇怪的是。当我们设置"不显示隐藏文件"时,这些文件看起来和其他隐藏文件一样苍白,当我们设置"不显示隐藏文件"时,它们会被隐藏。在文件夹选项中(像任何其他普通隐藏文件一样)。

在我的机器中,我看到的是C:中的autoexec.batconfig.sys。我在一台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。我正在寻找一个好的开始…

谢谢. .

SoftwareMicrosoftWindowsCurrentVersionExplorerAdvancedHidden有一个注册表项来检查关于"显示隐藏文件"的全局标志-参见http://www.pctools.com/guides/registry/detail/1007/

编辑:
注意,还有一个关于"显示系统文件"的设置叫做ShowSuperHidden

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

User Key: [HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionExplorer
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_USERSoftwareMicrosoftWindowsCurrentVersionExplorer","Hidden",2);
if(hiddenValue == 1)
{
   //Files not hidden
}
else
{
   //Files are hidden
}

注册表项详细信息

C:中的autoexec.batconfig.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

相关内容

最新更新