Saltar al contenido

Cómo verificar si un archivo ya está abierto (en el mismo proceso)

Después de de esta larga recopilación de datos dimos con la respuesta esta cuestión que tienen ciertos usuarios. Te ofrecemos la solución y nuestro objetivo es resultarte de mucha ayuda.

Solución:

Abres el mismo archivo pero los asignas a diferentes variables. Lo que debes hacer es:

fileobj=open(filename,"wb+")

if not fileobj.closed:
    print("file is already opened")`

Estoy escribiendo con mi teléfono, por lo que el estilo puede no ser bueno, pero entenderá el punto. por cierto el .closed solo verifica si el archivo ha sido abierto por el mismo proceso de python.

Yo sugeriría usar algo como esto

# Only works on Windows
def is_open(file_name):
    if os.path.exists(file_name):
        try:
            os.rename(file_name, file_name) #can't rename an open file so an error will be thrown
            return False
        except:
            return True
    raise NameError

Editado para adaptarse a los problemas específicos del OP

class FileObject(object):
    def __init__(self, file_name):
        self.file_name = file_name
        self.__file = None
        self.__locked = False

    @property
    def file(self):
        return self.__file

    @property
    def locked(self):
        return self.__locked

    def open(self, mode, lock=True):#any testing on file should go before the if statement such as os.path.exists()
        #replace mode with *args if you want to pass multiple modes
        if not self.locked:
            self.__locked = lock
            self.__file = open(self.file_name, mode)
            return self.file
        else:
            print 'Cannot open file because it has an exclusive lock placed on it'
            return None #do whatever you want to do if the file is already open here

    def close(self):
        if self.file != None:
            self.__file.close()
            self.__file = None
            self.__locked = False

    def unlock(self):
        if self.file != None:
            self.__locked = False

Sección de Reseñas y Valoraciones

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *