2009-02-14 2 views
9

Есть ли способ скрыть папки/файлы с помощью Python?Hide Folders/File with Python

Я работаю с огромным проектом (сканер уязвимостей). Проект создает много файлов и папок. Поэтому вопрос, есть ли способ создать скрипт, который скрывает файлы и папки?

+0

Не могли бы вы уточнить, что вы подразумеваете под «скрыть папки/файлы»? – jfs

+1

-1: не указана операционная система. –

+0

В окнах вы можете использовать% APPDATA% env var в качестве местоположения для хранения любых файлов, которые на самом деле не предназначены для потребления пользователями. –

ответ

1

Если вы можете поместить свои данные в файл стиля DBM, у вас будет только один файл данных.

http://docs.python.org/library/anydbm.html

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

Для этого требуется, чтобы ваши отдельные файлы были достаточно малы, чтобы их можно было легко загружать каждый раз, когда вам нужен доступ к их части. Если они большие, то рассмотрите их разделение и использование ключей DBM для доступа к ним. Например, если «example.txt» содержит много строк, и вы хотите иметь доступ к каждой отдельной строке, вы можете сохранить ее как db["example.txt/l1"] ... db["example.txt/l42"].

5
import tempfile 

См. documentation.

Здесь находится скрытый файл. "The file is readable and writable only by the creating user ID." i.e. значение означает «скрыть файл с других пользователей».

+2

Я честно не понимаю, как этот вопрос был рассмотрен 5 раз: вопрос о скрытых файлах/папках, и этот * короткий * ответ касается временных файлов. Ничто в связанной документации не касается скрытых файлов, и ОП никогда не утверждал, что его файлы были временными. – ereOn

+0

@ereOn: Я обновил ответ, чтобы определить, что означает «скрытый». ОП не уточнил, что он подразумевает под «скрыть», поэтому я понял смысл, который имеет смысл в контексте сканера уязвимостей. Кстати, вам вообще не нужно удалять файлы, созданные модулем tempfile; это то, как это часто используется. – jfs

1

есть. $ Filename вид вещи, которую вы ищете?

+0

Это не дает ответа на вопрос. Чтобы критиковать или просить разъяснения у автора, оставьте комментарий ниже их сообщения. – JMax

+0

@JMax: IDK, это своего рода попытка ответить. Я предполагаю, что вы попытались обозначить это как NAA, и этот флаг был отклонен. – ArtOfWarfare

6

Если это для Windows:

http://code.activestate.com/recipes/303343/

Резюме: импорт win32api, win32con, Os win32api.SetFileAttributes (имя файла, win32con.FILE_ATTRIBUTE_HIDDEN)

Если для Unix:

filename = "." + Имя файл

для адреса файла в использовании файла в качестве префикса г, потому что адрес содержит обратное косую черту ... например, Г «с: ... \ файлом»

+2

К сожалению, модуль win32api отсутствует в стандартной версии для доставки http://stackoverflow.com/questions/227928/whats-win32con-module-in-python-where-can-i-find-it – Tebe

6

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

ctypes.windll.kernel32.SetFileAttributesW(path, 2) 

path должен быть юникода тип строки, как это версия Юникода SetFileAttributes. Константа 2 равна this page (FILE_ATTRIBUTE_HIDDEN). Я полагаю, что нет никакого способа получить красивые постоянные имена из ctypes, поэтому вам придется искать их сами.

+0

ctypes имеет windll (но только на окнах ...), см. документацию здесь http://docs.python.org/2/library/ctypes.html#loading-dynamic-link-libraries – ldrg

+0

Я получаю 'ImportError: Нет модуля с именем 'ctypes.windll' 'на обоих Python 2.7 и 3.4. Все это в Windows. –

+0

Это потому, что вы не импортируете ctypes.windll, вы импортируете ctypes и вызываете ctypes.windll. Взгляните на источник для ctypes в std-библиотеке, импортер не может загружать windll, потому что это не подмодуль пакета ctypes. http://hg.python.org/cpython/file/844879389a17/Lib/ctypes/__init__.py#l442 – ldrg

0

возможно (по крайней мере, с linux и ext fs), чтобы открыть/создать файл и сохранить только обработчик файлов для операций чтения/записи из активного процесса, но ни один другой процесс не может видеть этот файл, указанный в каталогах или где угодно.

это зависит от операционной системы и файловой системы, и это как раз просто, как:

fh = open("data", "w+") 
os.system("unlink data") 
fh.write(sth) 
... 

очень изменчив файл и изменчивое решением немного, но работает отлично.