none
Log aberto por diversos processos simultaneamente. RRS feed

  • Pergunta

  • Olá,

    Estou criando um log para meu WebService, de modo a registrar cada requisição recebida em um ÚNICO arquivo.
    O log é sempre escrito com um writeline todo de uma vez neste caso, e cada cliente de mu WS faz isso apenas uma única vez.
    Porém, antes de escrever tenho que saber se o log atingiu 10MB, para isso abri em modo leitura, com acesso compartilhado para leitura.

    String path = directoryLog + archiveLog;
    if (File.Exists(path))
    {
       try
       {
          using (FileStream fs = File.Open(path, FileMode.Open, FileAccess.Read, FileShare.Read))
          {
              if (fs.Length > 10000000) // 10MB
              {
                  fs.Close();
                  File.Copy(Path.Combine(directoryLog, archiveLog), Path.Combine(directoryLog, oldArchiveLog));
                  File.Delete(Path.Combine(directoryLog, archiveLog));
              }
          }
       }
       catch (IOException copyError)
       {
          sEvent = copyError.ToString();
    
          if (!EventLog.SourceExists(sSource))
             EventLog.CreateEventSource(sSource, sLog);
          EventLog.WriteEntry(sSource, sEvent);
       }
    }

    Mesmo assim dá erro.

    Como posso resolver este conflito?

    FileShare.Read não seria para isto?
    No site diz isto: "Allows subsequent opening of the file for reading. If this flag is not specified, any request to open the file for reading (by this process or another process) will fail until the file is closed. However, even if this flag is specified, additional permissions might still be needed to access the file."

    Que permissões adicionais seriam estas?

    Obrigado a todos.


    Obrigado, Att, Gabriel Braga Graduando em Sistemas de Informação PUC-Rio

    quinta-feira, 25 de outubro de 2012 14:27

Respostas