FileStream a / różnice StreamWriter?

85

Pytanie:

Czym się różni FileStreami StreamWriterw .Net ?

W jakim kontekście masz go użyć? Jaka jest ich zaleta i wada?

Czy można połączyć te dwa w jedno?

Co tam
źródło

Odpowiedzi:

98

Czym różni się FileStream i StreamWriter w dotnet?

A FileStreamjest Stream. Podobnie jak wszystkie strumienie, zajmuje się tylko byte[]danymi.

A StreamWriter : TextWriter, jest dekoratorem strumienia. TextWriter koduje dane tekstowe, takie jak ciąg lub znak, byte[]a następnie zapisuje je w połączonym Stream.

W jakim kontekście masz go użyć? Jaka jest ich zaleta i wada?

Gdy masz byte[]dane, używasz samego FileStream . Dodajesz StreamWriterkiedy chcesz napisać tekst. Użyj programu formatującego lub serializatora, aby pisać bardziej złożone dane.

Czy można połączyć te dwa w jedno?

Tak. Aby utworzyć StreamWriter, zawsze potrzebujesz strumienia. Metoda pomocnicza System.IO.File.CreateText("path")utworzy je w kombinacji, a następnie wystarczy Dispose () zewnętrzny zapisujący.

Henk Holterman
źródło
4
Należy również zauważyć, że FileStreamjest to rodzaj strumienia, który jest specjalnie dostosowany do plików. Strumienie natywnie działają z bajtami, jednak StreamWriter/ Reader będzie zapisywać / odczytywać tekst w dowolnym strumieniu, nie tylko FileStreams. Na przykład MemoryStreams, NetworkStreamsitp ..
iliketocode
19

FileStream zapisuje bajty, StreamWriter zapisuje tekst. To wszystko.

Hans Passant
źródło
14
Właściwie to nie wszystko ... Ale to jedna poprawna różnica.
David
14

FileStream jest jawnie przeznaczony dla plików roboczych.

StreamWriter może służyć do przesyłania strumieniowego do dowolnego typu strumienia - gniazd sieciowych, plików itp.

ScottGu całkiem ładnie wyjaśnia różne obiekty Stream tutaj: http://www.codeguru.com/Csharp/Csharp/cs_data/streaming/article.php/c4223

David
źródło
1
Doskonałe odniesienie dla strumieni, chociaż nie obejmuje strumieni R / W o dostępie swobodnym. Szczególnie przydatne są informacje o serializacji / deserializacji i demonstracja strumieni niebędących plikami. +1
ThunderGr
7

Cóż, z MSDN dla FileStream:

Udostępnia Stream wokół pliku, obsługując synchroniczne i asynchroniczne operacje odczytu i zapisu.

oraz MSDN dla StreamWriter:

Implementuje TextWriter do pisania znaków w strumieniu w określonym kodowaniu.

Najbardziej oczywistą różnicą jest to, że FileStreampozwala na operacje odczytu / zapisu, podczas gdy StreamWriterjest to tylko zapis.

StreamWriterStrona idzie do dodania:

StreamWriter jest przeznaczony do wyprowadzania znaków w określonym kodowaniu, podczas gdy klasy pochodne od Stream są przeznaczone do bajtów wejściowych i wyjściowych.

Więc druga różnica dotyczy FileStreambajtów, podczas gdy StreamWriterdotyczy tekstu.

ChrisF
źródło
6

Są to dwa różne poziomy wykorzystywane do przekazywania informacji do znanych źródeł danych.

A FileStreamto typ strumienia, który jest koncepcyjnie mechanizmem wskazującym na jakąś lokalizację i może obsługiwać dane przychodzące i / lub wychodzące do iz tej lokalizacji. Istnieją strumienie do odczytu / zapisu do plików, połączeń sieciowych, pamięci, potoków, konsoli, detektorów debugowania i śledzenia oraz kilku innych typów źródeł danych. W szczególności FileStreamistnieje do wykonywania odczytów i zapisów w systemie plików. Większość strumieni ma dość niski poziom wykorzystania i traktuje dane jako bajty.

A StreamWriterjest opakowaniem dla Stream, które upraszcza używanie tego strumienia do wyprowadzania zwykłego tekstu. Udostępnia metody, które pobierają ciągi zamiast bajtów i wykonuje niezbędne konwersje do iz tablic bajtowych. Są inni pisarze; drugim głównym, którego użyjesz, jest ten XmlTextWriter, który ułatwia zapisywanie danych w formacie XML . Istnieją również odpowiedniki programu Reader dla Writerów, które podobnie zawijają strumień i ułatwiają odzyskiwanie danych.

KeithS
źródło
0

Jedną z kluczowych różnic (oprócz powyższych komentarzy) może być to, że FileStream obsługuje losowy dostęp do dysku w trybie odczytu i zapisu do dowolnego określonego obiektu FileStream.Position. W przypadku dużych modyfikacji plików może to być nieocenione.

beanmf
źródło