掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
複数のファイルを開き反復処理を行うには (ID:61623)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
> 以下、ファイルストリーム名とfor eachブロック内の変数が同じ場合のエラーです for each のブロックの中では、fileという変数は String^型 として認識されます。ブロックの外側で宣言した Stream^型 の file という変数とはまったく別物ということになります。 ためしに、for each のブロックが終わったあとに、fileという変数を使うと Stream^型として扱われるのがわかると思います。 (というか、これは本当にC言語の基本中の基本です。) それと、ブロック内で変数宣言した場合、そのブロックが終われば、変数宣言された変数はソコで終わりです。それはループでも同じです。 (これも、C言語の基本) Testプログラム) #include <iostream> struct test{ test() { std::cout << "test コンストラクタ" << std::endl; } ~test() { std::cout << "test デストラクタ\n" << std::endl; } }; int main(){ for ( int i = 0; i < 10; i++ ){ test t; } return 0; } ReadByteが結局一番怪しいそうです。きちんと読んでいるファイルが該当のものなのかを確認する必要がありそうです。 (24バイト読み込んでいるところにブレイクポイントを張って、そのファイルを実際バイナリエディタで開いて先頭24バイトが同じか確認してみる) > バイナリエディタ(Strings)で相違は確認しています 本当にありますか? テキストで比較すると、例えば UTF-8 コードのテキストファイルの場合 全てのファイルの1,2バイト目は BOM に当たるのですべて同じになります。 そういう恐れはないでしょうか? それと、先頭2バイトしか使わないのであれば、24バイト読み込む必要性がわかりません。 listView1->Items->Clear(); for each ( String^ file in openFileDialog1->FileNames ) { // ファイルオープン IO::BinaryReader^ binReader = gcnew IO::BinaryReader( IO::File::OpenRead( file ) ); //arg_1, aarg_2初期化 arg_1 = binReader->ReadByte(); arg_2 = binReader->ReadByte(); // 省略 // アイテム追加 array< String^ >^ item = { file, s2, s3, s4, s5 }; listView1->Items->Add( gcnew ListViewItem( item ) ); } でいいような。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.