Pergunta

Eu estou tentando usar um StreamReader para ler um arquivo, mas é sempre em uso por outro processo, para eu recebo este erro:

O processo não pode acessar o arquivo '\ Arfjwknasgmed17 \ C $ \ FLAG CONDIÇÃO \ CP-ARFJN-FLAG.XLS' porque ele está sendo usado por outro processo.

Existe uma maneira que eu posso ler isto sem copiá-lo? Ou será que a minha única opção?

Foi útil?

Solução

Você pode ler o arquivo apenas se o programa que abriu o primeiro arquivo especificado ler compartilhando direitos sobre esse arquivo.

Se o arquivo de fato, não têm direitos de compartilhamento de leitura, porém, você não seria capaz de copiá-lo em primeiro lugar.

Você pode não ser capaz de acessar um arquivo se você estiver especificando um direito de participação, que entra em conflito com o direito partilha de um programa que já tem o arquivo aberto. Por exemplo, você não pode conceder acesso de gravação se o programa que já abriu não concede acesso de gravação.

Se o programa que abriu o arquivo em primeiro lugar suportes Volume Shadow Copy (VSS), você também pode usar VSS para ter acesso ao arquivo.

Há drivers de software comerciais que permitem que você acessar tais arquivos, mesmo quando eles estão em uso. Você costumava ser capaz de obter Abra o Gerenciador de arquivos por St-Bernards, e você também pode usar Arquivo Access Manager (FAM) por VisionWorks Solutions Inc. Esses drivers são tipicamente OEM'ed para empresas de software de backup para inclusão em seus produtos.

VSS funciona, dizendo o programa que tem o arquivo já aberto que outro programa gostaria de ler a partir do arquivo. VSS, em seguida, faz uma cópia do arquivo e permite que você leia a partir desta cópia. VSS não funciona para aplicações legadas.

FAM transparente funciona para programas herdados e não-legadas iguais, especificando uma 'lista de permitidos' de aplicações que podem acessar exclusivamente aberto e fechado arquivos. Apenas os programas nesta lista é permitido o acesso a esses arquivos. Quando um arquivo está sendo aberto, ele entra em modo de cache para que você vai obter uma cópia do arquivo como era quando o 'backup / open' do arquivo começou. Neste ponto, o programa que originalmente abriu o arquivo vê o arquivo tal como ele realmente é, e o segundo programa na lista permitida, vê o arquivo como era quando o '/ backup aberta' do arquivo aconteceu. Isso garante a consistência do arquivo.

Outras dicas

tentar o código abaixo.

FileStream fileStr = File.Open(<full file name>, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
fileStream = new StreamReader(fileStr);

Eu tentei-lo no Windows XP. Se o arquivo já está aberto no modo de escrita por algum outro processo e não tenha especificado compartilhando direitos, você ainda será capaz de abrir o arquivo em modo de leitura.

Disclaimer: Ele funciona, mas, em seguida, eu não tenho certeza se você deve usá-lo no código de produção. Eu ainda não sou capaz de encontrar qualquer documentação formal que diz que deve funcionar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top