Python: системный файл Windows

Как в Python определить файл, который является «файлом оконной системы». Из командной строки я могу сделать это с помощью следующей команды:

  ATTRIB "c:  file_path_name.txt"  

Если в ответе есть символ «S», значит это системный файл Windows. Я не могу определить эквивалент в питоне. Несколько примеров похожих запросов выглядят так:

Можно ли записывать файл?

  import osfilePath = r'c:  testfile.txt '  если os.access (filePath, os.W_OK): print 'Writable'else: print' not writeable ' 

другой способ …

   import osimport statfilePath = r'c:  testfile.txt'attr = os.stat (filePath) [0], если не attr & stat.S_IWRITE: print 'notwritable'else: print' writerable ' 

Но я не могу найти функцию или перечисление для идентификации системного файла Windows. Надеюсь, есть встроенный способ сделать это. Я бы предпочел не использовать win32com или другой внешний модуль.

Причина, по которой я хочу это сделать, заключается в том, что я использую os.walk для копирования файлов с одного диска на другой. Если бы существовал способ пройти по дереву каталогов, игнорируя системные файлы, это тоже может работать.

Спасибо за чтение.

Вот решения, которые я придумал на основе ответа:

Использование win32api:

  import win32apiimport  win32confilePath = r'c:  test_file_path.txt'если не win32api.GetFileAttributes (filePath) & win32con.FILE_ATTRIBUTE_SYSTEM: print filePath, 'не является системным файлом Windows' или иначе: print filePath, 'является системным файлом Windows'  

и используя ctypes:

  import ctypesimport ctypes.wintypes как типы # Из pywin32FILE_ATTRIBUTE_SYSTEM = 0x4kernel32dll = ctypes.windll.kernel32class WIN32_FILE_ATTRIBUTE_DATA_DATA (ctypes.  Структура): _fields_ = [("dwFileAttributes", types.DWORD), ("ftCreationTime", types.FILETIME), ("ftLastAccessTime", types.FILETIME), ("ftLastWriteTime", types.FILETIME), ("nFileSizeHigh"  , types.DWORD), ("nFileSizeLow", types.DWORD)] def isWindowsSystemFile (pFilepath): GetFileExInfoStandard = 0 GetFil  eAttributesEx = kernel32dll.GetFileAttributesExA GetFileAttributesEx.restype = ctypes.c_int # Я не могу определить здесь правильные аргументы # GetFileAttributesEx.argtypes = [ctypes.c_char, ctypes.c_int, WIN32_FILE_DATAINFILUTE_INFILE_ATTRIBUTE_IN32_FILE_ATTRIBUTFile_File_File_File_Data_path_TIBUTE_File_File_File_Data_TIBUTE_Path)  ctypes.byref (wfad)) return wfad.dwFileAttributes & FILE_ATTRIBUTE_SYSTEMfilePath = r'c:  test_file_path. txt 'если не isWindowsSystemFile (filePath): print filePath,' не является системным файлом Windows 'иначе: print filePath,' является системным файлом Windows ' 

Интересно, вставляет ли константа «FILE_ATTRIBUTE_SYSTEM» в моем коде является допустимой, или я могу получить ее значение также с помощью ctypes?


Но я не могу найти функцию или перечисление для идентификации системного файла Windows. Надеюсь, есть встроенный способ сделать это.

Такого нет. В файловой абстракции Python нет понятия «системный файл», поэтому она не дает вам возможности получить его. Кроме того, stat Python представляет собой очень тонкую оболочку для функций stat или _stat в библиотеке времени выполнения Microsoft C, которая не не имею понятия «системный файл». Причина этого в том, что и файлы Python, и библиотека C Microsoft разработаны так, чтобы «во многом походить на POSIX».

Конечно, Windows также имеет полностью разная абстракция для файлов. Но это не отображается функциями open , stat и т. Д .; скорее, существует полностью параллельный набор функций, таких как CreateFile , GetFileAttributes и т. д. И вы должны вызывать их, если хотите эту информацию.

Я бы предпочел не использовать win32com или другой внешний модуль.

Что ж, вам не нужен win32com , потому что это просто Windows API, а не COM.

Но win32api — это самый простой способ сделать это. Он предоставляет красивую оболочку вокруг GetFileAttributesEx , функции, которую вы хотите вызвать.

Если вы не хотите использовать внешний модуль, вы всегда можете вместо этого вызывать функции Windows API через ctypes . Или используйте subprocess для запуска инструментов командной строки (например, ATTRIB — или, если хотите, например, DIR/S/AS , чтобы Windows выполняла за вас бит рекурсивного обхода-пропуска системных файлов…).

Документы ctypes показывают, как вызывать функции Windows API , но в первый раз это немного сложно.

Сначала вам нужно перейти на страницу MSDN, чтобы узнать, какую DLL вам нужно загрузить (kernel32), и есть ли у вашей функции отдельные A и W варианты (есть) и какие значения передавать для любых констант (вы должны перейти по ссылке на другую страницу и знать, как работают перечисления C, чтобы узнать, что GetFileExInfoStandard равно 0), а затем вам нужно выяснить, как определить любые необходимые структуры . В данном случае примерно так:

  from ctypes import * kernel = windll.kernel32GetFileExInfoStandard = 0GetFileAttributesEx = kernel.GetFileAttributesExGetFileAttributesEx.restype = c_intGetFileAttributesEx..  

Если вы действительно не хотите использовать win32api , вы можете выполнить работу, чтобы завершить оболочку ctypes самим собой. Лично я бы использовал win32api .


Между тем:

Причина, по которой я хочу сделать это, потому что я использую os.walk для копирования файлов с одного диска на другой. Если бы существовал способ пройти по дереву каталогов, игнорируя системные файлы, которые тоже могут работать.

В этом случае, особенно с учетом вашей жалобы на то, что проверка каждого файла была слишком медленной, вы, вероятно, тоже не хочу использовать os.walk . Вместо этого используйте FindFirstFileEx и выполните рекурсию вручную. Вы можете различать файлы и каталоги без необходимости stat (или GetFileAttributesEx ) для каждого файла (который os.walk выполняет в обложки), вы можете отфильтровать системные файлы прямо внутри функции поиска, вместо того, чтобы stat для каждого файла и т. д.

Опять же, параметры те же : используйте win32api , если хотите, чтобы это было легко, в противном случае используйте ctypes .

Но в этом случае я бы посмотрел на betterwalk Бена Хойта, потому что он уже выполнил 99% ctypes -wrapping и 95% остального кода, который вам нужен.



Что такое системный файл Windows?

Технически говоря, системный файл Windows — это любой файл с включенным атрибутом скрытой системы. На практике системные файлы — это те файлы, от которых Windows зависит правильная работа. Они варьируются от драйверов оборудования до файлов конфигурации и DLL и даже различных файлов кустов, составляющих реестр Windows.

Эти файлы часто изменяются автоматически во время обновления системы или установки приложений, но, в общем, это лучше оставить системные файлы в покое. Удаление, перемещение, переименование или изменение этих файлов может привести к полному сбою системы. Из-за этого часто они скрыты и доступны только для чтения. Тем не менее, существует множество хитростей и хитростей, в том числе множество, о которых мы рассказали на этом сайте, которые включают изменение системных файлов.

Если вы будете осторожны и знаете, что вы делаете — или следуете инструкциям из источника, которому доверяете — вы можете получить большую пользу от этих типов взломов.

Где хранятся системные файлы?

Системные файлы обычно находятся в определенных папках, которые определены как системная папка. Чтобы предотвратить случайное удаление, эти файлы по умолчанию скрыты от просмотра в Windows. Они также не отображаются в результатах поиска.

На самом деле системные файлы могут храниться во многих местах на вашем компьютере. Корневая папка вашего системного диска (C: ), например, содержит системные файлы, такие как файл подкачки (pagefile.sys) и файл гибернации (hiberfil.sys)..

Большинство системных файлов Windows хранятся в C: Windows, особенно в подпапках, таких как/System32 и/SysWOW64. Но вы также найдете системные файлы, разбросанные по пользовательским папкам (например, папка appdata) и папкам приложений (например, ProgramData или папки Program Files).

Как показать скрытые системные файлы в Windows

Хотя системные файлы по умолчанию скрыты в Windows, их достаточно легко отобразить в Windows.

Просто имейте в виду, что удаление, перемещение, редактирование или переименование их файлы могут вызывать всевозможные проблемы. Наш совет — оставлять системные файлы по большей части скрытыми. Если вы намеренно работаете с системными файлами, применяя какой-то взлом или настройку, отобразите их, а затем снова скройте, когда закончите.

СВЯЗАННЫЕ: Как показать скрытые файлы и папки в Windows 7, 8 или 10

Чтобы показать системные файлы в Windows, запустите открыв окно проводника. В проводнике выберите «Просмотр»> «Параметры»> «Изменить папку и параметры поиска».

В окне «Параметры папки» перейдите на вкладку «Просмотр», а затем снимите флажок «Скрыть защищенные системные файлы (рекомендуется)». По завершении нажмите «ОК».

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

Что произойдет, если системные файлы будут повреждены?

Это действительно зависит от того, какие системные файлы повреждены, поэтому симптомы могут включать что-либо из приложений, которые не запускаются ( или сбой), ошибки синего экрана или даже сбой при запуске Windows.

Если вы подозреваете, что системные файлы повреждены или отсутствуют, есть несколько встроенных системных инструментов, которые могут помочь. Средство проверки системных файлов (SFC) сканирует системные файлы Windows и может заменить любые отсутствующие или поврежденные. Команда обслуживания образов развертывания и управления ими (DISM) может использоваться для устранения основных проблем, которые мешают SFC выполнять свою работу. Используя их вместе, вы сможете успешно восстановить отсутствующие или поврежденные системные файлы.

СВЯЗАННЫЕ: Как восстановить Поврежденные системные файлы Windows с помощью команд SFC и DISM

SFC сканирует ваш компьютер на наличие любых системных файлов Windows на наличие повреждений или любых других изменений. Если он найдет файл, который был изменен, он автоматически заменит его правильной версией.

Если ничего не помогает, и ни один из этих вариантов не работает, вы всегда можете обновить или сбросить компьютер до состояния по умолчанию. Этот вариант следует использовать только в крайнем случае.. Все ваши личные файлы будут сохранены, но все приложения, загруженные после выхода на рынок, будут удалены.

ПРОЧИТАЙТЕ СЛЕДУЮЩИЙ
  • › Можете ли вы сказать, когда на ваших Apple Watch есть Блокировка GPS?
  • › Как использовать пакеты стикеров в Signal
  • › Как изменить ярлык, открывающий игровую панель Windows 10
  • ›Как открыть файл MBOX (с помощью Mozilla Thunderbird)
  • › Происхождение Comic Sans: почему так много людей его ненавидят?
Оцените статью
logicle.ru
Добавить комментарий