2009-02-14 56 views
9

¿Hay alguna manera de ocultar carpetas/archivos con Python?Ocultar carpetas/Archivo con Python

Estoy trabajando en un gran proyecto (un escáner de vulnerabilidades). El proyecto crea una gran cantidad de archivos y carpetas. Por lo tanto, la pregunta es, ¿hay alguna manera de hacer un script que oculte archivos y carpetas?

+0

¿Podría explicar a qué se refiere con 'ocultar carpetas/archivos'? – jfs

+1

-1: no se ha especificado ningún sistema operativo. –

+0

En Windows, puede usar% APPDATA% env var como ubicación para almacenar los archivos que no son realmente para el consumo de los usuarios. –

Respuesta

1

Si puede poner sus datos en un archivo de estilo DBM, solo tendrá un único archivo de datos.

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

En lugar de nombres de archivo que usaría llaves en el PP y el contenido de su archivo se encontraría indexando en el PP.

Esto requiere que sus archivos individuales sean lo suficientemente pequeños para poder cargarlos completamente cada vez que necesite acceder a una parte de ellos. Si son grandes, considere dividirlos y usar las teclas DBM para acceder a los fragmentos. Por ejemplo, si "ejemplo.txt" contiene muchas líneas y desea poder acceder a cada línea individualmente, puede almacenarla como db["example.txt/l1"] ... db["example.txt/l42"].

5
import tempfile 

Ver el documentation.

Aquí "archivo oculto" significa "The file is readable and writable only by the creating user ID." es decir, el significado es "ocultar archivo de otros usuarios".

+2

Honestamente, no entiendo cómo se votó cinco veces esta pregunta: la pregunta es sobre archivos/carpetas ocultos y esta * respuesta * breve trata de archivos temporales. Nada en la documentación vinculada se trata de archivos ocultos y el OP nunca declaró que sus archivos eran temporales. – ereOn

+0

@ereOn: Actualicé la respuesta para definir qué significa "oculto". El OP no había elaborado lo que quiere decir con "hide", así que tomé el significado que tiene sentido en el contexto de un escáner de vulnerabilidades. Por cierto, en general no es necesario eliminar los archivos creados por el módulo tempfile; es solo como se usa a menudo. – jfs

1

es $ $ nombre de archivo el tipo de cosa que estás buscando?

+0

Esto no proporciona una respuesta a la pregunta. Para criticar o solicitar aclaraciones de un autor, deje un comentario debajo de su publicación. – JMax

+0

@JMax: IDK, es una especie de intento de respuesta. Supongo que trataste de marcarlo como NAA y esa bandera fue rechazada. – ArtOfWarfare

6

Si esto es para Windows:

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

Resumen: importación win32api, win32con, os win32api.SetFileAttributes (nombre de archivo, win32con.FILE_ATTRIBUTE_HIDDEN)

Si para Unix:

nombre_archivo = "." + Nombre de fichero

dirección de archivo de nombre de archivo en uso r como prefijo de dirección porque contiene las barras inclinadas invertidas por ejemplo ... r "c: ... \ archivo"

+2

desafortunadamente, el módulo win32api está ausente en la versión de envío estándar http://stackoverflow.com/questions/227928/whats-win32con-module-in-python-where-can-i-find-it – Tebe

6

Si no quiero ir a la molestia de utilizando pywin32 puede llamar a SetFileAttributes con ctypes en la biblioteca estándar.

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

path debe haber un tipo de cadena Unicode ya que es la versión Unicode de SetFileAttributes. La constante 2 es de this page (FILE_ATTRIBUTE_HIDDEN). Imagino que no hay forma de obtener buenos nombres constantes de los tipos, así que tendrás que buscarlos tú mismo.

+0

ctypes tiene windll (pero solo en Windows ...), consulte la documentación aquí http://docs.python.org/2/library/ctypes.html#loading-dynamic-link-libraries – ldrg

+0

Me sale 'ImportError: Ningún módulo llamado 'ctypes.windll' 'en ambos Python 2.7 y 3.4. Esto es todo en Windows. –

+0

Eso es porque no importa ctypes.windll, importa ctypes y llama a ctypes.windll. Eche un vistazo a la fuente de ctypes en la biblioteca estándar, el importador no puede cargar windll porque no es un submódulo del paquete ctypes. http://hg.python.org/cpython/file/844879389a17/Lib/ctypes/__init__.py#l442 – ldrg

0

es posible (al menos con linux y ext fs) abrir/crear archivo y mantener solo el manejador de archivos disponible para operaciones de lectura/escritura desde el proceso activo, pero ningún otro proceso puede ver ese archivo listado en directorios o en cualquier lugar.

es depende del sistema operativo y el sistema de archivos, y es sólo tan simple como:

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

archivo muy volátil y una solución complicado poco, pero funciona bien.