2013-01-03 7 views
11

ho bisogno di aprire un file di testo all'interno di C# utilizzando FileStream e con le opzioni di seguito indicateLeggere il contenuto effettivo del file di testo utilizzando FileStream e queste opzioni C#

var fileStream = new FileStream(filePath, 
           FileMode.Open, 
           FileAccess.Read, 
           FileShare.Read, 64 * 1024, 
           (FileOptions)FILE_FLAG_NO_BUFFERING | 
            FileOptions.WriteThrough & FileOptions.SequentialScan); 

Il file di testo contiene un "1" o " 0 "e dopo aver ottenuto i risultati ho intenzione di assegnare il contenuto del file di testo a una variabile stringa. Nel caso tu sia interessato, ho bisogno delle opzioni sopra riportate per evitare che Windows legga i file di testo dalla cache.

System.IO.File.ReadAllText() 

... non è abbastanza buono.

Sarebbe qualcuno abbastanza gentile da scrivere un sottotitolo semplice che incorpori questi requisiti per me perché gli esempi che ho visto finora riguardano il lavoro con byte e buffer (un'area su cui ho davvero bisogno di lavorare in questo momento) e lascia a questo.

Grazie

+1

"System.IO.File.ReadAllText() ... non è abbastanza buono."? Perché? –

+1

@SteveB Presumo perché non è possibile specificare lo stato di condivisione. – ThunderGr

risposta

7

È possibile utilizzare un StreamReader per leggere dal flusso:

string contents; 
using(var sr = new StreamReader(fileStream)) 
{ 
    contents = sr.ReadToEnd(); 
} 
16

Forse qualcosa di simile:

FileStream fileStream = new FileStream("[path]", FileMode.Open, FileAccess.Read, FileShare.Read, 64 * 1024, 
     (FileOptions)0x20000000 | FileOptions.WriteThrough & FileOptions.SequentialScan); 

    string fileContents; 
    using (StreamReader reader = new StreamReader(fileStream)) 
    { 
     fileContents = reader.ReadToEnd(); 
    } 


    bool assignedvariable = Convert.ToBoolean(fileContents); 

assignedvariable terrà vero se il file contiene 1 e false se contiene 0.

Siamo spiacenti se questo è stato risolto un le persone pubblicano molto velocemente qui.

+0

Grazie Dave, ha fatto il lavoro. – user1776480

3
File.ReadAllBytes 

o

File.ReadAllText 

saranno entrambi utilizzare teoricamente cache dei file di Windows.

Leggi this per più comprensione e per alcune delle restrizioni alla FILE_FLAG_NO_BUFFERING e anche leggere this for a similar stackoverflow question