Ho un programma semplice per leggere un file utilizzando StreamReader e elaborarlo riga per riga. Ma il file che sto leggendo può a volte trovare in una cartella di rete. Mi sono imbattuto mentre eseguivo dei test con un file di questo tipo, che se la connessione di rete venisse persa a un certo punto mentre sto leggendo, rimarrà nella stessa linea ancora e ancora in loop su un loop infinito, risultando la stessa linea del risultato da stream.ReadLine().StreamReader.ReadLine si bloccherà in un ciclo infinito
C'è un modo per trovare quando fileHandle non è disponibile dal flusso stesso? Mi aspettavo che un tipo FileNotAvailableException di un'eccezione si attivasse quando il filehandle viene perso da StreamReader.
Ecco il mio frammento di codice ...
string file = @"Z://1601120903.csv"; //Network file
string line;
StringBuilder stb = new StringBuilder();
StreamReader stream = new StreamReader(file, Encoding.UTF8, true, 1048576);
do
{
line = stream.ReadLine();
// Do some work here
} while (line != "");
StreamReader non può "perdere" l'handle. Se in effetti non è possibile utilizzare i dati memorizzati nella cache e deve raggiungere la rete per ottenere il contenuto del file, la chiamata di ReadFile() sottostante avrà esito negativo e si otterrà System.IOException. Che riporta "Errore di rete", una delle tante cose che possono andare storte durante la lettura dei file. Prenderesti l'eccezione e informerai l'utente in modo che possa fare tutto il necessario per correggere il problema. –
Sto meditando se chiudere questo perché qui c'è un bug che non è visibile in questo codice. Il codice mostrato qui deve essere una versione semplificata del codice reale. – usr
@ HansPassant, sì, inizialmente ho pensato anche la stessa cosa. Ma se si esegue questa riga di codice, si verificherà il problema. Non lancia un'eccezione perché continua a lanciarmi la stessa linea indefinitamente. – Asanka