Comprobar si el archivo está en uso [duplicado]

Hola chicos necesito ayuda. Estoy tratando de abrir un archivo de texto en un servidor desde varios clientes al mismo tiempo para no bloquear el archivo cuando lo leo. Como esto:

new StreamReader(File.Open(logFilePath, 
                       FileMode.Open, 
                       FileAccess.Read, 
                       FileShare.ReadWrite))

Ahora estoy tratando de verificar si alguno de los clientes usa este archivo (porque quiero escribir algo nuevo en él), pero como no lo estoy bloqueando cuando lo leo, no sé cómo hacerlo. . No puedo intentar abrir y capturar una excepción porque se abrirá.

preguntado el 16 de abril de 13 a las 08:04

Eso muestra cómo verificar si un archivo está en uso al verificar si está bloqueado. No es mi pregunta -

Si sus clientes no pueden hacer frente al archivo que se está escribiendo mientras lo leen, ¿por qué diablos está especificando FileShare.ReadWrite? -

Y dado que cada cliente actúa de forma autónoma, el único enfoque viable es intentar abrir el archivo para escribir y hacer frente a una excepción si no está disponible para escribir; todo lo demás (p. ej., verificar y luego abrir) está sujeto a condiciones de carrera. -

2 Respuestas

¿Puedes probar esto?

O mira esta pregunta ya hecha aquí ->¿Hay alguna forma de comprobar si un archivo está en uso?

protected virtual bool IsFileLocked(FileInfo file)
{
    FileStream stream = null;

    try
    {
        stream = file.Open(FileMode.Open, FileAccess.ReadWrite, FileShare.None);
    }
    catch (IOException)
    {
        //the file is unavailable because it is:
        //still being written to
        //or being processed by another thread
        //or does not exist (has already been processed)
        return true;
    }
    finally
    {
        if (stream != null)
            stream.Close();
    }

    //file is not locked
    return false;
}

contestado el 23 de mayo de 17 a las 13:05

No puedo intentar abrir y capturar una excepción porque se abrirá

Por qué ? Es una opción valiosa para trabajar de esa manera.

Por cierto, también puede crear un archivo predefinido vacío, digamos "access.lock", y otros, para comprender si el real el archivo está bloqueado verifique la presencia del archivo de bloqueo:

if(File.Exist("access.lock")) 
  //locked 
else
  //write something

Respondido 16 Abr '13, 08:04

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.