Szukaj…


Korzystanie ze strumieni

Strumień to obiekt, który zapewnia niskopoziomowe środki przesyłania danych. Same w sobie nie działają jako kontenery danych.

Dane, z którymi mamy do czynienia, mają postać tablicy byte [] ( byte [] ). Funkcje do odczytu i zapisu są zorientowane na bajty, np. WriteByte() .

Brak funkcji radzenia sobie z liczbami całkowitymi, ciągami itp. To sprawia, że strumień jest bardzo ogólny, ale łatwiejszy w obsłudze, jeśli, powiedzmy, po prostu chcesz przesłać tekst. Strumienie mogą być szczególnie pomocne, gdy masz do czynienia z dużą ilością danych.

Będziemy musieli użyć innego rodzaju Strumienia, w zależności od tego, gdzie trzeba go zapisać / odczytać (tj. Sklep z podkładem). Na przykład, jeśli źródłem jest plik, musimy użyć FileStream :

string filePath = @"c:\Users\exampleuser\Documents\userinputlog.txt";
using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
    // do stuff here...

    fs.Close();
}

Podobnie MemoryStream jest używany, jeśli magazyn kopii zapasowych to pamięć:

// Read all bytes in from a file on the disk.
byte[] file = File.ReadAllBytes(“C:\\file.txt”);

// Create a memory stream from those bytes.
using (MemoryStream memory = new MemoryStream(file))
{
   // do stuff here...
}

Podobnie System.Net.Sockets.NetworkStream służy do uzyskiwania dostępu do sieci.

Wszystkie strumienie pochodzą z ogólnej klasy System.IO.Stream . Dane nie mogą być bezpośrednio odczytywane ani zapisywane ze strumieni. .NET Framework zapewnia klasy pomocnicze, takie jak StreamReader , StreamWriter , BinaryReader i BinaryWriter które konwertują między rodzimymi typami a interfejsem strumienia niskiego poziomu i przesyłają dane do lub ze strumienia za Ciebie.

Odczyt i zapis do strumieni można wykonać za pomocą StreamReader i StreamWriter . Należy zachować ostrożność przy ich zamykaniu. Domyślnie zamknięcie spowoduje również zamknięcie zawartego strumienia i uniemożliwi korzystanie z niego do dalszych zastosowań. To domyślne zachowanie można zmienić za pomocą konstruktora, który ma parametr bool leaveOpen i ustawiając jego wartość na true .

StreamWriter :

FileStream fs = new FileStream("sample.txt", FileMode.Create);
StreamWriter sw = new StreamWriter(fs);
string NextLine = "This is the appended line.";
sw.Write(NextLine);
sw.Close();
//fs.Close(); There is no need to close fs. Closing sw will also close the stream it contains.

StreamReader :

using (var ms = new MemoryStream())
{
    StreamWriter sw = new StreamWriter(ms);
    sw.Write(123);
    //sw.Close();     This will close ms and when we try to use ms later it will cause an exception
    sw.Flush();     //You can send the remaining data to stream. Closing will do this automatically
    // We need to set the position to 0 in order to read 
    // from the beginning.
    ms.Position = 0;
    StreamReader sr = new StreamReader(ms);
    var myStr = sr.ReadToEnd();
    sr.Close();
    ms.Close();
}

Ponieważ Stream , StreamReader , StreamWriter itp. Implementują interfejs IDisposable , możemy wywołać metodę Dispose() na obiektach tych klas.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow