Como garantir que um arquivo esteja corretamente escrito para o sistema de arquivos?

StackOverflow https://stackoverflow.com/questions/14726901

  •  07-03-2022
  •  | 
  •  

Pergunta

Eu tenho um aplicativo que lê um arquivo de um arquivo zip e salva-o para arquivar no sistema de arquivos. Depois de escrevê-lo no sistema de arquivos, comece a começar imediatamente a ler este arquivo com um leitor Sax2. Em arquivos maiores (300+ MB), às vezes ocorre, que o Sax2 pára de analisar por causa de uma tag não suposta. Mas quando eu verifico o arquivo (ou mesmo tento lê-lo novamente mais tarde) ele funciona, então o arquivo é ok.

FZipKit.ExtractToStream(LFileName, LStream);
LStream.SaveToFile(OutputFilename);
SAX2.processUrl(OutputFilename);

Minha suposição é que o arquivo ainda não estava totalmente escrito para o sistema de arquivos quando eu comecei o processo de análise.

Existe uma maneira de garantir que o arquivo foi escrito ou o vapor foi lavado para o sistema de arquivos?

THX

Foi útil?

Solução

Primeiro de tudo, presumir que o analisador XML opera corretamente. Se for incapaz de ler arquivos, bem a solução é óbvia.

O que nos leva a olhar como o arquivo é criado. Quando você chama Savethofile, o arquivo é aberto, escrito, fechado e buffers estão liberados. Em um sistema de baunilha simples, seu analisador XML verá todo o conteúdo do arquivo. A única conclusão é que algo está interferindo. O suspeito mais como o seu scanner de vírus. Muitos scanners, até os mais respeitados, não podem lidar adequadamente com um arquivo sendo fechado e, em seguida, imediatamente reaberto.

A linha inferior é que seu código está bem e o problema quase certamente está com seu ambiente local.

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