FileStream vs / farkları StreamWriter?


85

Soru:

Arasında farklı nedir FileStreamve StreamWriteriçinde .Net ?

Hangi bağlamı kullanman gerekiyor? Avantajları ve dezavantajları nedir?

Bu ikisini bir araya getirmek mümkün mü?

Yanıtlar:


98

Dotnet'te FileStream ve StreamWriter arasındaki fark nedir?

A FileStream, bir Stream. Tüm Akışlar gibi, yalnızca byte[]verilerle ilgilenir .

A StreamWriter : TextWriter, bir Akarsu dekoratörüdür. Bir TextWriter dize veya karakter gibi Metin verilerini kodlar byte[]ve ardından bağlantılı olana yazar Stream.

Hangi bağlamı kullanman gerekiyor? Avantajları ve dezavantajları nedir?

byte[]Verileriniz olduğunda çıplak bir FileStream kullanırsınız . StreamWriterMetin yazmak istediğinizde bir eklersiniz . Daha karmaşık veriler yazmak için Biçimlendirici veya Serileştirici kullanın.

Bu ikisini bir araya getirmek mümkün mü?

Evet. Bir StreamWriter oluşturmak için her zaman bir Akışa ihtiyacınız vardır. Yardımcı yöntem System.IO.File.CreateText("path")onları kombinasyon halinde oluşturacaktır ve sonra yalnızca dış yazıcıyı Dispose () etmeniz gerekir.


4
Ayrıca, FileStreamözellikle dosyalara göre uyarlanmış bir akış türü olduğuna dikkat etmek önemlidir . Akışlar yerel olarak baytlarla çalışır, ancak StreamWriter/ Reader yalnızca s değil , herhangi bir akışta metin yazar / okur FileStream. Örneğin, MemoryStreams, NetworkStreamsvb ..
iliketocode

19

FileStream bayt yazar, StreamWriter metin yazar. Bu kadar.


14
Aslında bu "hepsi" değil ... Ama bu tek bir doğru fark.
David

14

Bir FileStream, açıkça çalışma dosyaları için tasarlanmıştır.

Bir StreamWriter, herhangi bir Akış türüne ( ağ soketleri, dosyalar vb .) Akış yapmak için kullanılabilir .

ScottGu, farklı Akış nesnelerini burada oldukça güzel bir şekilde açıklıyor: http://www.codeguru.com/Csharp/Csharp/cs_data/streaming/article.php/c4223


1
Rastgele erişimli R / W akışlarını kapsamamasına rağmen akışlar için mükemmel referans. Özellikle serileştirme / serileştirme bilgileri ve dosya dışı akışların gösterilmesi çok kullanışlıdır. +1
ThunderGr

7

Eh, MSDN'den FileStream:

Hem zaman uyumlu hem de zaman uyumsuz okuma ve yazma işlemlerini destekleyen bir dosya etrafında bir Akış gösterir.

ve şunun için MSDN StreamWriter:

Belirli bir kodlamada bir akışa karakter yazmak için bir TextWriter uygular.

En belirgin fark, yalnızca yazma FileStreamsırasında okuma / yazma işlemlerine izin vermesidir StreamWriter.

StreamWriterSayfa ekleme devam ediyor:

StreamWriter, belirli bir kodlamada karakter çıktısı için tasarlanmıştır, oysa Stream'den türetilen sınıflar bayt girişi ve çıkışı için tasarlanmıştır.

Yani ikinci bir fark, FileStreambaytlar StreamWriteriçin, metin içindir.


6

Bilinen veri kaynaklarına bilgi çıkışında kullanılan iki farklı düzeydir.

A FileStream, kavramsal olarak bir konuma işaret eden ve o konuma gelen ve / veya bu konumdan giden verileri işleyebilen bir mekanizma olan bir Akış türüdür. Dosyalara, ağ bağlantılarına, belleğe, kanallara, konsola, hata ayıklama ve izleme dinleyicilerine ve diğer birkaç veri kaynağına okuma / yazma için akışlar mevcuttur. Özellikle, FileStreamdosya sistemine okuma ve yazma işlemleri gerçekleştirmek için vardır. Çoğu akış, kullanımlarında oldukça düşük seviyelidir ve verileri bayt olarak ele alır.

A StreamWriter, düz metin çıktısını almak için bu akışı kullanmayı basitleştiren bir Akış için bir sarmalayıcıdır. Baytlar yerine dizeler alan yöntemleri ortaya çıkarır ve bayt dizilerine ve bayt dizilerinden gerekli dönüştürmeleri gerçekleştirir. Başka Yazarlar da var; XML formatında XmlTextWriterveri yazmayı kolaylaştıran diğer ana kullanacağınız şeydir. Ayrıca, bir Akışı benzer şekilde sarmalayan ve verileri geri almayı kolaylaştıran Yazarların Okuyucu muadilleri de vardır.


0

Önemli bir fark (yukarıdaki yorumlara ek olarak), FileStream'in rastgele disk erişimini desteklemesi ve belirtilen herhangi bir FileStream.Position'a yazması olabilir. Büyük dosya değişiklikleri için bu çok değerli olabilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.