2011-02-07 17 views
5

Quando scrivevo una routine di I/O in C++, di solito lo rendevo il più generico possibile, operando sulle interfacce da <iostream>.C# - stream question

Ad esempio:

void someRoutine(std::istream& stream) { ... } 

Come deve lo stesso essere fatto in C#?

ho il sospetto che potrei scrivere la mia routine basata sul System.IO.TextReader o System.IO.TextWriter, ma non sono sicuro.


Ovviamente Sono in cerca di una stessa classe base in C#, che è il più generico std::istream o std::ostream e che può essere estesa in molti modi (ad esempio, come boost::iostreams estende le std:: flussi).

+1

Una classe astratta è di base come si otterrà ... (anche se dipende da ciò che si sta cercando, c'è anche [System.IO.Stream] (http://msdn.microsoft. it/it/us/library/system.io.stream.aspx)) –

risposta

5

Se si desidera lavorare con le stringhe, è necessario prendere uno TextReader o TextWriter.

Se si desidera utilizzare i byte, è necessario prendere uno Stream.

Queste classi sono ereditate da implementazioni concrete come FileStream, StringWriter e NetworkStream.

+2

Non è esattamente vero. TextReader e TextWriter operano sugli stream, ma non si trovano nella catena di ereditarietà di Stream o FileStream. Sono le basi per StringReader e StringWriter, rispettivamente. Per ciò che l'OP sta cercando di fare, System.IO.Stream è la classe appropriata (equivalente a un flusso di input e output combinato). –

+1

@Chris: non l'ho mai detto. Ho detto _queste lezioni. – SLaks

+0

Ho erroneamente interpretato la tua risposta, quindi, mi scuso. Ho preso "Queste classi" per indicare tutte le classi menzionate sopra, presumo che l'OP avrebbe potuto commettere lo stesso errore. –

3

Utilizzare System.IO.Stream se si preoccupano solo dei byte. TextReader/TextWriter si riferiscono a quando si conoscono i dati sottostanti come testo.

1

classe La base èStream. MemoryStream, FileStream, eccetera ereditano da questa classe.

0

È possibile utilizzare la funzione C# per il flusso (System.IO.Stream) come in C++. Se questo è appropriato dipende dalla funzione che scrivi.