C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: StreamReader再利用したい


(過去ログ 100 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■60121 / inTopicNo.1)  StreamReader再利用したい
  
□投稿者/ sudagoro (1回)-(2011/06/21(Tue) 13:53:00)

分類:[C#] 

StreamReader で
sr.ReadToEnd().ToString();
とするとストリームの現在位置が末尾まで行ってしまうのですが、これをもう一度先頭に戻す方法はありますか?

引用返信 編集キー/
■60123 / inTopicNo.2)  Re[1]: StreamReader再利用したい
□投稿者/ shu (796回)-(2011/06/21(Tue) 13:59:36)
No60121 (sudagoro さん) に返信
> StreamReader で
> sr.ReadToEnd().ToString();
> とするとストリームの現在位置が末尾まで行ってしまうのですが、これをもう一度先頭に戻す方法はありますか?
>
StreamのSeekで先頭に移動出来る可能性はありますが、Streamの種類によっては無理です。
ReadToEndでメモリ内に読んだのなら、その文字列内で処理をすればSeekとは関係なく処理は可能です。
引用返信 編集キー/
■60124 / inTopicNo.3)  Re[2]: StreamReader再利用したい
□投稿者/ sudagoro (2回)-(2011/06/21(Tue) 14:24:26)
Stream の Seek はできませんでした。
やはり無理なんでしょうかね。
MemoryStream にもキャストできなかったり。

ちなみに ReadToEnd で読み込んだ文字列が文字化けしているかどうかの判定はできますか?

引用返信 編集キー/
■60125 / inTopicNo.4)  Re[3]: StreamReader再利用したい
□投稿者/ shu (797回)-(2011/06/21(Tue) 14:37:45)
No60124 (sudagoro さん) に返信

> MemoryStream にもキャストできなかったり。
そうではなくStreamReaderが扱っているStreamですよ?
sr = new StreamReader(stm)
のstmです。またはsr.BaseStreamです。

>
> ちなみに ReadToEnd で読み込んだ文字列が文字化けしているかどうかの判定はできますか?
文字化けをどう定義するかによると思います。正規表現で正しい文字クラスをすべて置換して
文字が残れば文字化けするとか。

正規表現文字クラスについて
http://msdn.microsoft.com/ja-jp/library/20bw873z(v=VS.80).aspx#CharacterClassSyntax
引用返信 編集キー/
■60128 / inTopicNo.5)  Re[3]: StreamReader再利用したい
□投稿者/ 逆運の覇者 (5回)-(2011/06/21(Tue) 15:00:26)
難しいですね。
文字化けを判断するのは人間ですから。
ただ、「SJISに変換してみたら、SJISにないはずのデータが混じっている」
というのはチェックできるので、SJIS, EUC, UTF-8, UNICODEあたりで
ないはずの文字データが混じってないかチェックするようにするのも手ではあります。

でも、通信する以上はどの文字コードで送られているかを知っているはずです。
たとえば、
HTTPサーバとクライアントはいくつもの文字コードに対応していますが、
通信相手にどの文字コードなのかを明示して通信しています。
あるいは、通信で文字コードを通知せずに、仕様として文字コードを固定するのも良いです。

なので、
 System.IO.StreamReader sr = new StreamReader("a.txt", Encoding.GetEncoding("sjis"));
と、文字コードを指定するのが良いでしょう。

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -