powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Снять атрибут "скрытый" с файла (программно).
25 сообщений из 29, страница 1 из 2
Снять атрибут "скрытый" с файла (программно).
    #39619831
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возникла задача, кот. раньше не решал.
Файл в папке не виден, путь к нему знаю.

В FAR делается так (из верхнего меню).
Файлы -> Атрибуты файлов
снять крестик на слове "скрытый"
Установить

Предполагается, что пользователь, под которым запущен процесс имеет на это право.

.Net, API. Желательно API.
CMD категорически не приветствуется.

Владельца менять умею, права для пользователя/группы задавать умею,
а этого просто никогда не делал.

Google с разбегу не помог.

К слову, кто-нибудь знает
1) как это ручками в виндах без FAR-а сделать?
2) как вообще файл увидеть в проводнике, если он скрыт?
Панель управления -> Оформление и персонализация -> Показ скрытых файлов и папок -> Нижняя опция "Показывать скрытые файлы, папки и диски" - почему-то не работает.

Подопытный файл, к слову:
C:\Program Files\Windows Mail\WinMail.exe
Начиная с Win7 до Win10 1703 включительно он скрыт, на 1709 его тупо нет.
По дефолту владелец TrustedInstaller, "Administrators" имеют права чтения и чтения выполнения (не унаследовано),
т.е. предварительно (под Administrators) меняется владелец TrustedInstaller->Administrators и задаются полные права для Administrators, тогда галку "скрытый" можно снять из Far (запуск AsAdmin).
...
Рейтинг: 0 / 0
Снять атрибут "скрытый" с файла (программно).
    #39619832
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Снять атрибут "скрытый" с файла (программно).
    #39619834
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий772) как вообще файл увидеть в проводнике, если он скрыт?

Windows 10

Проводник → Параметры → Изменить параметры папок и поиска → Вид (вкладка) → Скрытые файлы и папки → Показывать скрытые файлы и папки (в самом низу)
...
Рейтинг: 0 / 0
Снять атрибут "скрытый" с файла (программно).
    #39619838
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttДмитрий77,

https://msdn.microsoft.com/en-us/library/system.io.file.setattributes(v=vs.110).aspx
Спасибо.

А я пока нашел (мозги все-таки у меня не под .Net заточены)
GetFileAttributes function
SetFileAttributes function

Ну, судя по описанию в обоих вариантах все просто, icacl-ы писать не придется, уже радует.

hVosttПроводник → Параметры → Изменить параметры папок и поиска → Вид (вкладка) → Скрытые файлы и папки → Показывать скрытые файлы и папки (в самом низу)А вот ни фига не работает, ни из 7-ки, ни из 10-ки.
C:\Program Files\Windows Mail\WinMail.exe (попробуй, правда если у тебя Win10 1709 то там этого файла нет)
...
Рейтинг: 0 / 0
Снять атрибут "скрытый" с файла (программно).
    #39619843
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77А вот ни фига не работает, ни из 7-ки, ни из 10-ки.
C:\Program Files\Windows Mail\WinMail.exe (попробуй, правда если у тебя Win10 1709 то там этого файла нет)

Потому что есть разница между скрытым и системным файлом. Проводник не отображает файлы, помеченные как системные.

https://msdn.microsoft.com/en-us/library/windows/desktop/gg258117(v=vs.85).aspx
...
Рейтинг: 0 / 0
Снять атрибут "скрытый" с файла (программно).
    #39619850
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttПотому что есть разница между скрытым и системным файлом.
Это понятно, что это разные атрибуты.
hVosttПроводник не отображает файлы, помеченные как системные.
Ну тогда надо уточнить
1) скрытый+системный - не отображает (и "свойствами папки" не лечится)
2) системный, но НЕ скрытый - отображает
Задачи отнять у файла атрибут "системный" - не стоит. При снятии атрибута "скрытый" файл отображается.
...
Рейтинг: 0 / 0
Снять атрибут "скрытый" с файла (программно).
    #39619854
d7i
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Проводник → Параметры → Изменить параметры папок и поиска → Вид (вкладка) → Скрытые файлы и папки → Показывать скрытые файлы и папки (в самом низу)
А вот ни фига не работает, ни из 7-ки, ни из 10-ки.
C:\Program Files\Windows Mail\WinMail.exe (попробуй, правда если у тебя Win10 1709 то там этого файла нет)

В 7-ке:
Проводник-Сервис-Параметры папок-Вид-Показывать скрытые файлы, папки и диски

Файл C:\Program Files\Windows Mail\WinMail.exe прекрасно виден...

Правда, при такой настройке везде (в т.ч. на рабочем столе) также виден файл desktop.ini, что мне крайне не нравится.
Поэтому этот флажок никогда не включаю, так как проводником практически не пользуюсь.
FAR в зубы - ничего не скроешь, видно всё..
...
Рейтинг: 0 / 0
Снять атрибут "скрытый" с файла (программно).
    #39619877
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Ну тогда надо уточнить
1) скрытый+системный - не отображает (и "свойствами папки" не лечится)
2) системный, но НЕ скрытый - отображает
Задачи отнять у файла атрибут "системный" - не стоит. При снятии атрибута "скрытый" файл отображается.

А, ну может быть... :)
...
Рейтинг: 0 / 0
Снять атрибут "скрытый" с файла (программно).
    #39619885
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
d7iВ 7-ке:
Проводник-Сервис-Параметры папок-Вид-Показывать скрытые файлы, папки и диски
Файл C:\Program Files\Windows Mail\WinMail.exe прекрасно виден...

Не виден. Системные не видны (м.б. у Вас какие настройки хитрые).
Для среднестатистического юзера задача сделать файл видимым практически считай нерешаемая, т.к. FAR без смены владельца и наделением правами бесполезен, а не видя файла, нельзя вызвать свойства->безопасность
Остаются заумные cmd-утилиты (я всегда делал своей программой), а потом уже far.

Ну да ладно, к теме вопроса, вернее ответа.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
 Public Function SetFileAttributeHidden_Net(ByVal file_path As String, _
   ByVal bHide As Boolean, Optional ByRef err_text As String = vbNullString) As Boolean
    Try
      If bHide Then
        IO.File.SetAttributes(file_path, IO.File.GetAttributes(file_path) Or IO.FileAttributes.Hidden)
      Else
        IO.File.SetAttributes(file_path, IO.File.GetAttributes(file_path) And Not IO.FileAttributes.Hidden)
      End If
      Return True
    Catch ex As Exception
      err_text = ex.ToString
      Return False
    End Try
  End Function



Но мне больше нравится через API (недолюбливаю эти try... catch exeption-ы, во-первых тормозят, во-вторых описание ошибки - такая простыня ахинеи):
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
  Public Const FILE_ATTRIBUTE_HIDDEN As Integer = &H2

  Public Const INVALID_FILE_ATTRIBUTES As Integer = -1

  Public Declare Unicode Function GetFileAttributes Lib "kernel32" Alias "GetFileAttributesW" _
  (ByVal lpFileName As String) As Integer
  Public Declare Unicode Function SetFileAttributes Lib "kernel32" Alias "SetFileAttributesW" _
  (ByVal lpFileName As String, ByVal dwFileAttributes As Integer) As Boolean


  Public Function SetFileAttributeHidden(ByVal file_path As String, _
   ByVal bHide As Boolean, Optional ByRef err_text As String = vbNullString) As Boolean

    Dim dwAttr As Integer = GetFileAttributes(file_path)
    If dwAttr = INVALID_FILE_ATTRIBUTES Then
      err_text = "Error=" & RaiseAPIErrorByNumber(Err.LastDllError)
      Return False
    End If

    If bHide Then
      SetFileAttributeHidden = SetFileAttributes(file_path, dwAttr Or FILE_ATTRIBUTE_HIDDEN)
    Else
      SetFileAttributeHidden = SetFileAttributes(file_path, dwAttr And Not FILE_ATTRIBUTE_HIDDEN)
    End If
    If SetFileAttributeHidden = False Then
      err_text = "Error=" & RaiseAPIErrorByNumber(Err.LastDllError)
    End If
  End Function
...
Рейтинг: 0 / 0
Снять атрибут "скрытый" с файла (программно).
    #39619917
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77d7iВ 7-ке:
Проводник-Сервис-Параметры папок-Вид-Показывать скрытые файлы, папки и диски
Файл C:\Program Files\Windows Mail\WinMail.exe прекрасно виден...

Не виден. Системные не видны (м.б. у Вас какие настройки хитрые).
Ну куда уж хитрее:
...
Рейтинг: 0 / 0
Снять атрибут "скрытый" с файла (программно).
    #39619925
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныНу куда уж хитрее:
Да уж, век живи век учись. Тупо не заметил.
А ведь в XP такая же настройка была, но почему-то проблем с ней никогда не было, и пользовался ей частенько.
Но у меня 7-ки никогда как рабочей не стояло, а в 8.1-10 об этом никогда не думал.
...
Рейтинг: 0 / 0
Снять атрибут "скрытый" с файла (программно).
    #39620012
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Но мне больше нравится через API (недолюбливаю эти try... catch exeption-ы, во-первых тормозят, во-вторых описание ошибки - такая простыня ахинеи):

Так может тогда уйти на C/C++? Зачем эти адские костыли и противоречия?
...
Рейтинг: 0 / 0
Снять атрибут "скрытый" с файла (программно).
    #39620024
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttТак может тогда уйти на C/C++?
Это корявость виндовса и оттуда оно все так же коряво будет выглядеть. Вобщем это проблема ОС, а не ЯП.
...
Рейтинг: 0 / 0
Снять атрибут "скрытый" с файла (программно).
    #39620034
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima ThVosttТак может тогда уйти на C/C++?
Это корявость виндовса и оттуда оно все так же коряво будет выглядеть. Вобщем это проблема ОС, а не ЯП.

Вопрос не в корявости. Дмитрий проглатывает исключения и работает с ошибками в низкоуровневом стиле, в то время, как исключения созданы для того, чтобы ошибки вываливались наружу из глубин кода, и там обрабатывались с помощью try/catch. Именно в этом смысл, и именно этот смысл абсолютно бессмысленно закапывается в могилу и с ошибками Дмитрий работает убогим образом, точно так же как с ними работают в Си. И здесь назревает вопрос. Если в наличии такая любовь к низкоуровневому АПИ и низкоуровневым концепциям разработки, за каким вообще использовать .NET?
...
Рейтинг: 0 / 0
Снять атрибут "скрытый" с файла (программно).
    #39620035
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это не наезд и не критика, если что. Просто интересно.

Когда мне надо было иметь дело с АПИ, работая с криптографией, я использовал C++/CLI, так как маршаллинг и интеропы в .NET в большом количестве, это омерзительно.
...
Рейтинг: 0 / 0
Снять атрибут "скрытый" с файла (программно).
    #39620051
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt, если что. Просто интересно.
Если что, потрудись,сделай поиск по моим ответам на подобные оффтопные вопросы.
API вообще пофиг на чем программировать. В VB.Net они программируются как в VB6, есть ньюансы, но это дело наживное.
C/C++ достаточно сложен, и там тоже куча подводных камней. С рантаймами, SDK/DDK гораздо тяжелее бороться чем с "версиями .Net".

По поводу try/catch в данном случае пофиг. Чтоб не вываливалась куча хлама можно в принципе вывести
Код: vbnet
1.
2.
    Catch
      err_text = "Error " & Err.Number.ToString & " (" & Err.Description & ")"

вместо
Код: vbnet
1.
2.
  Catch ex As Exception
      err_text = ex.ToString


Будет относительно коротко, хотя что нибудь да припишет.

Но. try...catch еще дает кучу реальных тормозов. К примеру попробуй из реестра сразу много параметров через try...catch если их там нет.

===
Все это фигня.

Я вот тут в процессе на интересный факт напоролся.
Если файл с атрибутом "системный" (пример - упомянутый WinMail.exe) , в него что скопировать нельзя?
IO.File.Copy(source_path, file_path, True) вываливается в Err.5 (нет доступа). Права на замену файла есть. В проводнике копируется (не без упреждающих окон правда), в far тоже.
Извратился в итоге так (так же как и снять hidden):
Код: vbnet
1.
2.
3.
SetFileAttributes(file_path, dwAttr And Not FILE_ATTRIBUTE_SYSTEM)
либо
IO.File.SetAttributes(file_path, IO.File.GetAttributes(file_path) And Not IO.FileAttributes.System)


Но ответа почему так и не нашел.
...
Рейтинг: 0 / 0
Снять атрибут "скрытый" с файла (программно).
    #39620053
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77В проводнике копируется (не без упреждающих окон правда), в far тоже.Они вроде бы то же самое и делают после акцепта предупреждения, снимают атрибут, пишут, ставят обратно.
Еще Нортон Коммандер так делал в ДОСе)
...
Рейтинг: 0 / 0
Снять атрибут "скрытый" с файла (программно).
    #39620059
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

ну значит я все правильно "догадался".
...
Рейтинг: 0 / 0
Снять атрибут "скрытый" с файла (программно).
    #39620064
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Но. try...catch еще дает кучу реальных тормозов.

Можно не нести здесь подобную хрень? Веришь в этот бред, ради бога, но людей не вводи в заблуждение.
...
Рейтинг: 0 / 0
Снять атрибут "скрытый" с файла (программно).
    #39620067
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бросаю иммунитет на бредятину по поводу «тормозов» try/catch для новичков и людей, которых может смутить подобные весьма неумные вбросы.

https://stackoverflow.com/questions/1308432/do-try-catch-blocks-hurt-performance-when-exceptions-are-not-thrown

Вкратце, на цикле из 10 миллионах проходов, просадка где-то в 30 мс. Т.е. почувствовать эту просадку можно только в очень редких случаях для обычного разработчика, на вычислительных алгоритмах с огромным количеством итераций.

Гораздо страшнее на этом фоне выглядит PInvoke, из-за которого просадки существенно выше.

Т.е., если человека так заботят «тормоза» try/catch, то он в первую очередь должен отказаться от .NET, если требуется работать с низкоуровневым API. Прям бежать надо, сверкая пятками от .NET, как от греха.

https://www.codeproject.com/Articles/253444/PInvoke-Performance
...
Рейтинг: 0 / 0
Снять атрибут "скрытый" с файла (программно).
    #39620069
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttМожно не нести здесь подобную хрень?
А можно на будущее вбросов оффтоповых не делать и за выражениями следить,
когда задают простой и достаточно четко сформулированный вопрос?
Ты ответил кстати, во втором посте, я оценил.
С галкой тоже разобрались.
В API я разбираюсь лучше, в механизмах .Net ты разбираешься лучше,
мне эти механизмы до такой степени не нужны.
Порассуждать о "вообще" интересно, мне -нет.
Пора уже научиться уважать друг друга.
...
Рейтинг: 0 / 0
Снять атрибут "скрытый" с файла (программно).
    #39620099
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttработая с криптографией
Ух ты. А чего криптографического можно придумать, если не секрет, что стандартных средств фреймворка не хватило?
...
Рейтинг: 0 / 0
Снять атрибут "скрытый" с файла (программно).
    #39620134
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77А можно на будущее вбросов оффтоповых не делать и за выражениями следить,

А можно на будущее не декларировать свои фантазии?

«Мне так нравится, мне так удобно, мне плевать...» — ок
«try/catch тормозит» — какой-то вымышленный бред, не ок

Этот форум не ваш личный бесплатный помощник. Я и другие люди всегда рады помочь, но также и другие люди читают и впитывают то, что тут пишут.

Дмитрий77Пора уже научиться уважать друг друга.

Я просто поинтересовался, ты меня грубо отправил читать какие-то твои темы, как будто я их не читал. И да, на этом форуме люди общаются, рассуждают, обсуждают. В этом есть много пользы для всех.
...
Рейтинг: 0 / 0
Снять атрибут "скрытый" с файла (программно).
    #39620135
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныУх ты. А чего криптографического можно придумать, если не секрет, что стандартных средств фреймворка не хватило?

.NET по сей день очень беден по части работы с криптографией, особенно когда это касается ГОСТ алгоритмов.
...
Рейтинг: 0 / 0
Снять атрибут "скрытый" с файла (программно).
    #39620137
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77,

Ну а так да, извиняюсь если задел некоторыми выражениями )
...
Рейтинг: 0 / 0
25 сообщений из 29, страница 1 из 2
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Снять атрибут "скрытый" с файла (программно).
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]