NullReferenceException

解決


ふらぷら  2008-06-04 04:53:09  No: 68480

テキストファイルから読み込みで
System::IO::FileStream^ fs = gcnew System::IO::FileStream("test.txt", System::IO::FileMode::Open, System::IO::FileAccess::Read);
System::IO::StreamReader^ sr = gcnew System::IO::StreamReader(fs);
array<String^>^ fileBody;
int i;
for(i=0; sr->Peek()>=0; i++){
  fileBody[i] = sr->ReadLine();
  bodyMax = i+1;
}
sr->Close();
fs->Close();

と言うコードを書いたところ、
「fileBody[i] = sr->ReadLine();」
で、NullReferenceExceptionエラーで実行が中断されてしまいます。

test.txtの中身は
----------
ああああ
いいいい
うううう
ええええ
(省略)
----------
となっていて、行数を把握することが出来ないので「sr->Peek()>=0」としました。
ここを「fileBody[i] = sr->ReadLine()) == NULL」とした時、
'int' 型から 'System::String ^' 型への変換ができません。
というエラーが発生し悩んでおります。

原因はfileBodyであることは分かるのですが、何がいけないのか分からない状態です。

ご教示お願い致します。

環境はWindowsXP(SP2)、VisualC++2005です。


επιστημη  URL  2008-06-04 05:07:01  No: 68481

fileBody が空だから。

array<String^>^ fileBody = gcnew array<String^>[10];
ってやっとけば、10行分読めます。


ふらぷら  2008-06-04 05:09:37  No: 68482

追記です。

「String^ fileBody = ReadToEnd()」で解決できるのですが、
「うううう」の部分を「かかかか」に置き換える作業を行いたいため、
1行ずつ確保し、検索、置換を行おうとしているのですが、
for(i=0; i<bodyMax; i++){
    if(fileBody[i]->Contains(L"うううう") == true) {
    (省略)
    }
}
の「fileBody[i]->Contains(L"うううう") == true」でも同様の
NullReferenceExceptionエラーが発生してしまいます。

fileBodyの中で一体何が行われているのかご教示お願い致します。


ふらぷら  2008-06-04 05:12:25  No: 68483

επιστημηさん有難うございます。

テキストファイルの行数が分からない場合、 
array<String^>をどう確保すればよいでしょうか?

再びご教示お願い致します。


ふらぷら  2008-06-04 05:39:29  No: 68484

すみません。

馬鹿なことをお聞きしました。

ArrayListにすれば解決することが出来ました。
ありがとうございました。


Blue  2008-06-04 07:57:50  No: 68485

>ArrayListにすれば解決することが出来ました。
List<String^>のほうが最適でしょう。

参考
http://www.atmarkit.co.jp/fdotnet/vb2005/vb2005_02/vb2005_02_01.html


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加