Domanda

Ho un'applicazione che legge un file da un archivio ZIP e lo salva in file sul file system. Dopo averlo scritto al file system, inizio immediatamente Avvia immediatamente per leggere questo file con un lettore SAX2. Sulle file più grandi (300+ MB) a volte si verifica, tale SAX2 smette di analizzare a causa di un tag non bianco. Ma quando controllo il file (o persino prova a leggerlo più tardi) funziona, quindi il file è giusto.

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

Il mio assunto è che il file non è stato ancora completamente scritto al file system quando ho avviato il processo di analisi.

C'è un modo per garantire che il file sia stato scritto o il vapore è stato flussoso sul file system?

grazie

È stato utile?

Soluzione

Prima di tutto assumere che il parser XML funziona correttamente. Se è incapace di leggere i file, bene la soluzione è ovvia.

Che ci porta a guardare come viene creato il file. Quando chiami savetofile, il file è aperto, scritto, chiuso e i buffer sono flocati. In un sistema di vaniglia semplice, il tuo parser XML vedrà l'intero contenuto del file. L'unica conclusione è che qualcosa interferisce. Il più simile al sospetto è il tuo scanner virus. Molti scanner, anche quelli più rispettati, non possono gestire correttamente un file chiuso e quindi immediatamente riaperto.

La linea di fondo è che il tuo codice va bene e il problema è quasi certamente con il tuo ambiente locale.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top