Как узнать, действительно ли элемент в папке Windows скрыт от пользователя? - PullRequest
1 голос
/ 24 сентября 2011

Мне нужно получить количество элементов (папок и файлов) в папке Windows. Я могу легко сделать это в зависимости от условий, если я должен включить скрытые элементы или нет. Но в моей программе я хочу получить количество элементов, видимых пользователю! то есть если скрытые элементы визуально видны в папке, то они должны быть включены в счет. Если скрытые предметы не видны, то они не должны быть включены.

Так как я могу узнать, установлено ли свойство «показывать скрытые файлы» на компьютере с Windows. Другими словами, есть ли способ узнать, действительно ли файл или каталог «скрыт» (визуально) от пользователя ??

Обновление: Я собираюсь вновь открыть этот вопрос. Хотя оригинальные ответы здесь ответили на мой вопрос, в определенной степени это не надежно.

Вот новый сценарий:

Некоторые файлы на диске C (еще нигде больше) визуально скрыты , хотя их скрытый атрибут имеет значение false (или не проверено), странно . Эти файлы выглядят бледными, как и другие скрытые файлы, когда они становятся видимыми (из параметров папки), и они визуально скрываются , когда мы устанавливаем «не показывать скрытые файлы» в параметрах папки (как и любой другой обычный скрытый файл).

Эти файлы в моей машине, как я вижу, autoexec.bat и config.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;

Так что я думаю, что единственный правильный способ - вызвать API-интерфейс оболочки. Я ищу хороший стартер ..

Спасибо ..

Ответы [ 3 ]

2 голосов
/ 24 сентября 2011

Этот параметр хранится в реестре, он находится:

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
}

Сведения о ключе реестра

2 голосов
/ 24 сентября 2011

Существует ключ реестра, чтобы проверить глобальный флаг относительно «показа скрытых файлов» на Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Hidden - см. http://www.pctools.com/guides/registry/detail/1007/

Edit:
Помните, что есть еще один параметр, относящийся к «показу системных файлов», который называется ShowSuperHidden

.
0 голосов
/ 30 июля 2012

autoexec.bat и config.sys в C: \ - это системные файлы, в которых 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

...