Come detto, non c'è davvero modo di ridurre il contenuto di un file di testo senza aprirlo e scorrere i byte. Potresti ottenere un guadagno se utilizzi http per scaricare il file, potresti ottenere un tipo mime che identifica il tipo di file, ma molto spesso è solo "ottetto-stream".
Mentre è possibile eseguire la forza bruta e leggere finché non si trova un avanzamento riga ("\ n"), quindi eseguire il backup di un carattere e vedere se è presente un ritorno a capo ("\ r"), prenderei uno più statico approccio poiché è necessario leggere i dati in qualsiasi modo.
1) Selezionare una dimensione di esempio di byte da leggere che dovrebbe ottenere almeno 2 o 3 record dal file.
2) Memorizza ogni byte di incontro (i'massumign single byte char set qui) come istogramma. Puoi farlo memorizzando il tuo conteggio in un arry indicizzato dal valore del byte o potresti usare un dizionario.
3) Dai un'occhiata al conteggio dei valori di ritorno a capo e avanzamento riga. Se si dispone di un conteggio degli avanzamenti riga e nessun ritorno a capo, allora si tratta di un file unix. Se il ritorno di carraige e il conteggio dei feed di riga, allora è un file di Windows.
Ciò che questo approccio consentirebbe anche di fare è un controllo di qualità sul file in entrata. Hai dei charcaters nell'istogramma che non sono aplha numerici? Poi qualcuno ti ha passato un file binario. Aspettando tutto il maiuscolo? Quindi cerca i conteggi al di fuori dei caratteri maiuscoli. Ci sono un certo numero di controlli che puoi fare per evitare di elaborare un file non di testo.
Non sono sicuro, quindi il commento, ma sarebbe possibile utilizzare un'espressione regolare come: '\ r \ n $'? Questo controllerebbe che l'avanzamento della riga termini con un \ r \ n'. In caso contrario, deve essere una linea Unix. – npinti
Non proprio possibile, poiché l'utilizzo di uno qualsiasi dei metodi "ReadLine" sugli oggetti di accesso al file framework .Net elimina i caratteri di nuova riga. Sono buoni se non ti interessa quale stile newline sta usando un file. Se leggo il file come uno stream, potrei fare qualcosa come suggerisci tu (che sostanzialmente equivale al metodo a cui potrei ricorrere ..) – freshr
Puoi garantire che tutte le terminazioni di riga siano coerenti all'interno di un file? Tecnicamente sarebbe possibile avere terminazioni di linea misti in modo diverso all'interno dello stesso file. –