我需要得到Windows文件夹中项目(文件夹和文件)的计数。我可以根据我是否应该包含隐藏道具的条件轻松地做到这一点。但是在我的程序中,我想要获得对用户可见的项目计数!也就是说,如果隐藏的项目在文件夹中是可视的,那么它应该包含在计数中。如果隐藏项不可见,则不应包含
我怎么知道是否显示隐藏文件属性在Windows计算机上设置。换句话说,是否有一种方法可以发现文件或目录是否"真正隐藏"?(视觉上)来自用户??
更新:我要重新打开这个问题。虽然这里的原始答案回答了我的问题,但在某种程度上它不是万无一失的。
下面是新的场景:
C驱动器中的某些文件(不是其他任何地方)在视觉上都是隐藏的,尽管它们的隐藏属性为false(或未检查),奇怪的是。当我们设置"不显示隐藏文件"时,这些文件看起来和其他隐藏文件一样苍白,当我们设置"不显示隐藏文件"时,它们会被隐藏。在文件夹选项中(像任何其他普通隐藏文件一样)。
在我的机器中,我看到的是C:
中的autoexec.bat
和config.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.bat
和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