DOBON.NET DOBON.NETプログラミング掲示板過去ログ

テキストファイルの読み取り

環境/言語:[WinXP/C#.NET/.NET Faramework1.1]
分類:[.NET]

テキストファイルの読み取りの方法を、MSDNライブラリを参考に作っているのですが、どうもうまくいきません(http://support.microsoft.com/default.aspx?scid=kb;ja;304430)。

保存された物を、起動時に読み込む物なのですが、コンパイルでエラーがでます。
具体的に言うと、
1:テキストボックスに書かれた文章をテキストファイルで保存する(できています)。
2:起動時に、保存されたテキストファイルを読み込む(これができていません。

コードを載せます。
string winDir=System.Environment.GetEnvironmentVariable("windir");

private void Form1_Load(object sender, System.EventArgs e)
{
StreamReader reader = new StreamReader(winDir + "c:\\nisi.txt");
reader.Read(textBox1.Text);//これがエラー
reader.Close();
}

一行目のは、よく意味が理解できませんが、(string...)MSDNに書いてあったので、一応書いてみました。
不要なら、指摘して下さい。

エラー内容は、
引数を '1' 個指定できる、メソッド 'Read' のオーバーロードはありません。
です。

独学C#さんで、オーバーロードの事を今も調べていますが、解決しません。
オーバーロードは名前を同じにして定義する事らしいのですが・・・。

文章で、意味が理解しづらいところがありましたら、言ってください。
■No7120に返信(YUSKさんの記事)
> コンパイルでエラーがでます。

http://dobon.net/vb/bbs/index.html#irresponsible

「プログラムが動きません。」と言ってソースコードを書いて質問される方の場合、
そのほとんどがコードを良く調べてみればすぐに分かる些細なミスが原因であることがほとんどです。
このようにあなた自身の仕事である退屈なデバッグを掲示板の参加者に押し付けるような行為はしないでください。
上級、中級の人にとっては、些細なミスかもしれませんが、初心者(初級)の人には些細なミスじゃない時もあるんじゃないかな・・・。

自分なりには精一杯調べて、投稿しました。

MSDNは勿論。グーグル等で検索もしました。
しかし、見つからなかったので、投稿しました。
#って、言っても初心者が言う事だから、信用されないかな・・・。
ストリームを使ってテキストファイルを読み込む
http://dobon.net/vb/dotnet/file/readfile.html
が参考になるのでは?

> string winDir=System.Environment.GetEnvironmentVariable("windir");
ウィンドウズシフォルダのパスを取得してるので、今回は不要と思われます

private void Form1_Load(object sender, System.EventArgs e)
{
StreamReader reader =
new StreamReader("c:\\nisi.txt" ,
System.Text.Encoding.GetEncoding("shift-jis"));
string s = reader.ReadToEnd();
reader.Close();
textBox1.Text = s
}

でよいのでは・・・
(テキストファイルに保存した時の文字コードが分かりませんが
読み込み時には文字コードを合わせる必要があると思います)
では
2004/11/02(Tue) 18:02:58 編集(投稿者)

■No7124に返信(YUSKさんの記事)
> 上級、中級の人にとっては、些細なミスかもしれませんが、
> 初心者(初級)の人には些細なミスじゃない時もあるんじゃないかな・・・。
コンパイルエラーの原因を見てとれない人間が、
本当にただの「初心者」というレベルだろうか不思議なのですが...。

# 真に失礼な言い方になってしまって心を悪くされると思いますが...

> 自分なりには精一杯調べて、投稿しました。
しかし、ここまでの熱意もありますし、調べているのならば、お答えしますね。

# ここまでのご無礼、お許しください。

■No7120に返信(YUSKさんの記事)
> reader.Read(textBox1.Text);//これがエラー

私の知るかぎり、StreamReaderクラスのRead()メソッドに、
引数が1つ指定できるオーバーロードは存在しないと思います。

と思ったら、

> エラー内容は、
> 引数を '1' 個指定できる、メソッド 'Read' のオーバーロードはありません。
> です。

そのまんまのコンパイルエラーが書かれておりますね。
オブジェクトブラウザで、Read()メソッドについて調べてみてください。

というより、今回は、引数を指定する必要がないかと思います。

 textBox1.Text = reader.Read();

じゃないかと思います(あ、書いちゃった...)

ちなみに、「Read()ではなく、ReadToEnd()や、ReadLine()でなくてもよいのか?」
を合わせて検討してみる必要もあるかと思います。

Read()メソッド・・・シーク位置から1文字ずつ取得
ReadToEnd()メソッド・・・ファイルの最後まで取得
ReadLine()メソッド・・・ラインフィードまで(1行)取得
keiさん
>ウィンドウズシフォルダのパスを取得してるので、今回は不要と思われます
そうですか。消してみます。
ありがとうございます。


>(テキストファイルに保存した時の文字コードが分かりませんが読み込み時には文字コードを合わせる必要があると思います)
これは、自分でできそうな気がしますので、自分でチャレンジしてみます。
ありがとうございました。

>java.lang.Nullpさん
こっちも無礼なところがありました。
すみません。
#正直に言うと、口論になる事を恐れていたのですが、誠意ある回答で、大変うれしかったです。

>本当にただの「初心者」というレベルだろうか不思議なのですが...。
ただの初心者以外の初心者と言うと・・・?
プログラミングをしたことの無い人・・・ですか?
一応今基礎を勉強中です。
そういう印象を与えてしまったのなら、すいません。
こちらが悪かったです。

>オブジェクトブラウザで、Read()メソッドについて調べてみてください。
調べてみます。
ありがとうございます。

>textBox1.Text = reader.Read();
勿論試してみました。
暗黙的に変換できないとエラーがでたので、明示的に変換してみました。
textBox1.Text = (string)reader.Read();
しかし、今度は変換できないとなったので、方法を変えてみました。
調べ方が足りなかったのかもしれません。
助言ありがとうございます。

>ちなみに、「Read()ではなく、ReadToEnd()や、ReadLine()でなくてもよいのか?を合わせて検討してみる必要もあるかと思います。
ReadToEnd()メソッドが使えそうです。
ありがとうございます。

一応解決と言う形にさせてもらいます。
みなさんありがとうございました。
解決済み!
2004/11/02(Tue) 18:59:38 編集(投稿者)

■解決チェック消しちゃったので、修正投稿

> こっちも無礼なところがありました。
> すみません。
いえ、こちらこそ申し訳ありませんでした。m(_ _)m
私がマナー違反を犯してるような状態になってしまったことを深くお詫びします。

> ただの初心者以外の初心者と言うと・・・?
> プログラミングをしたことの無い人・・・ですか?
> 一応今基礎を勉強中です。
> そういう印象を与えてしまったのなら、すいません。
> こちらが悪かったです。
コンパイルエラーの内容を追えないということは、エラーの内容がわからない。
多分「オーバーロード」という言葉がわからないかと思ったのです。
調べると、すぐ見つかるものです。

http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vbcn7/html/vaconoverloadresolution.asp

Yahoo!にあるとは、ちょっと驚き。
http://computers.yahoo.co.jp/dict/programming/coding/3442.html

> >textBox1.Text = reader.Read();
> 勿論試してみました。
> 暗黙的に変換できないとエラーがでたので、明示的に変換してみました。

そうです、Read()メソッドはInt型を返しますので、できません。
遠まわしに、ReadLine()やReadToEnd()でなくとも良いかと言ったのは
このためですが、どうやらそれも不要だったようですね。

# まあ、私自体が初心者だし、お許しを...。orz
解決済み!
>いえ、こちらこそ申し訳ありませんでした。m(_ _)m
>私がマナー違反を犯してるような状態になってしまったことを深くお詫びします。
とんでもないです。
マナー違反を犯しているような状態になってなんかいません。
こちらこそすみませんでした。

>多分「オーバーロード」という言葉がわからないかと思ったのです。
オーバーロードの意味は、確かに分かりませんでした。
なので、独学C#さんで、勉強したのですが、まだ勉強不足だったかもしれません。
すみませんでした。

>遠まわしに、ReadLine()やReadToEnd()でなくとも良いかと言ったのは
>このためですが、どうやらそれも不要だったようですね。
なるほど・・・。
そのような助言の仕方もあるのですね。
読解力が足りなかったようです。

#解決済みにレスをつけましたが、まだ一番上なので、良いと判断しました。
#駄目ならば、申し訳ありませんでした。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板