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?

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.


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.


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


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.


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.


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.