いま、Visual C++ 2008 Express Editionで、コマンドボタンをクリックした時に、600kバイト程度のバイナリファイルから特定の番地のデータを抜き出して(2バイト分)、そのデータをテキストデータに変換してテキストボックスに表示させたいのですが、コードを作成したのですが、エラーがたくさんでて書き方がよくわかりません。

一応コマンドボタンのところはこのように書きました。まだ、ファイルを読み込むまで行っていません。


private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
  //指定したファイル名でStreamReaderを設定する

  try{
      sreader1=gcnew StreamReader("sample.txt");
  }catch(Exception^ ex){
      //Console::WriteLine(ex->Message);
      return 0;
  }
this->textBox1->Text = L"変更1";
  this->textBox2->Text = L"変更2";
this->textBox3->Text = L"変更3";
}
};

どうかご教授いただきますようよろしくお願い致します。

「Visual C++ 2008 Expr」の質問画像

A 回答 (2件)

 こんばんは。

こう言う事でしょうか。

private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e)
{
//指定したファイル名でStreamReaderを設定する
try
{
System::IO::StreamReader^ sr = gcnew System::IO::StreamReader(_T("sample.txt"));
//受け皿
array<wchar_t>^ buf = gcnew array<wchar_t>(2);

//先頭から0x1f63バイト動かす
sr->BaseStream->Seek(0x1f63, System::IO::SeekOrigin::Begin);

//2バイト読み込む
sr->Read(buf, 0, buf->Length);

//此処でテキストボックスに入れる
this->textBox1->Text = gcnew System::String(buf);
}
catch(System::Exception^ ex)
{
System::Windows::Forms::MessageBox::Show(ex->ToString());
}

//this->textBox1->Text = L"変更1";
this->textBox2->Text = L"変更2";
this->textBox3->Text = L"変更3";
}
    • good
    • 0
この回答へのお礼

回答ありがとうございました。

教えていただいたコーディングでVisual C++ 2008 Express Editionでコンパイルかけてやっています。ただ、ちょっとエラーが数個出てきてその内容が理解できない状態です。

下のページにそのエラー内容が表示されているところの絵を貼り付けてみました。
http://sourceforge.jp/projects/felicareader/wiki …

どなたかもしよければ、何が悪く、どう解消したらよいか教えていただけませんでしょうか。

また、このC++プロジェクトは下のURLからダウンロードすることもできます。
http://svn.sourceforge.jp/view/RungeKutta/RungeK …

お礼日時:2009/05/25 14:33

 こんにちは。

補足頂きました。HPとエラー内容の方を拝見させて頂きました。
 この手のエラーは文字列以外の部分で、「全角文字」を使用しているのが原因です。
 form1.hの中の

System::IO::StreamReader^ sr = gcnew System::IO::StreamReader(_T("sample.txt"));

 の左側の空白部分に、「全角スペース」が混ざり込んでいるのが原因ではないでしょうか。ひとまず、バックスペースで、空白を消してみて下さい。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

本当にありがとうございます!!エラーが22もありましたが、1にまで減りました。とりあえず自力でやってみたいと思います。

お礼日時:2009/05/25 18:24

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QLinuxでブラウザを開くスクリプトを書くには?

WindowsでPerlからブラウザを開くスクリプトは以下の様にすれば実現できますが、Linuxの場合は、どのようにしたら良いのでしょうか?
ブラウザは、Mozila5.0です。

あと、Linuxでは、use Encodingを使うとそのようなモジュールは無いと怒られます。ActivePerl特有のモジュールでしょうか?perlは共に5.8を使っています。

#use Encoding;
use Win32::OLE;

# オブジェクト生成。
my $ie = Win32::OLE->GetActiveObject('InternetExplorer.Application') ||
Win32::OLE->new('InternetExplorer.Application',sub {shift->Quit}) ||
die "InternetExplorer: ".Win32::OLE->LastError;

$ie->{Visible} = 1; # Visibleに(見えるように)する。
# リクエストを投げてみる。

$ie->Navigate("http://www.yahoo.co.jp/");
while($ie->Busy){sleep 1; } # 待ちの秒数は適当

WindowsでPerlからブラウザを開くスクリプトは以下の様にすれば実現できますが、Linuxの場合は、どのようにしたら良いのでしょうか?
ブラウザは、Mozila5.0です。

あと、Linuxでは、use Encodingを使うとそのようなモジュールは無いと怒られます。ActivePerl特有のモジュールでしょうか?perlは共に5.8を使っています。

#use Encoding;
use Win32::OLE;

# オブジェクト生成。
my $ie = Win32::OLE->GetActiveObject('InternetExplorer.Application') ||
Win32::OLE->new('InternetExplorer.Appli...続きを読む

Aベストアンサー

use encoding です。eは小文字。
Windowsのファイルシステムはファイル名の大小文字を区別しないので通っていたのでしょう。
念のため、Encode は先頭のEが大文字です。

Mozillaの操作の件はわかりません。ごめんなさい。
起動だけなら見当つくんですけど。

Q”System::IO::StreamReader”ってどういう意味ですか?

Visual C++ 2008 Express Editionで、現在、600kバイト程度のバイナリファイルを読み込んで特定の番地のデータだけを取り出してそれをテキスト変換してテキストボックス内に表示させるというプログラムを作成しているのですが、このことをOKwaveでどのようにコーディングするかを教えてもらったところ、


System::IO::StreamReader^ sr=gcnew StreamReader(_T("sample.txt"));


このような文を教えてもらったのですが、全く知識がなく何をやっているのかわかりません。
”sr”というのは変数で、sample.txtからstreamReader関数でsample.txt内のデータをsr変数に
入れているという感じがしますが、”System::IO::StreamReader”とか”gcnew”とかの意味がよくわかりません。
どうかご教授お願いいたします。

Aベストアンサー

私は、C++で開発を行っているのではなくC#ですが・・・ さらに初心者ですが・・・

>System::IO::StreamReader
テキストの文字列を、指定のフォーマットなどで取り込む時に使用します。
srへ、格納した後は、自由に取り出すことができます。
(while文などを使用して、上から一行づつ取り出すなど)

>gcnew
gcnewは、初めてみたのでわかりませんが、メモリ管理周りっぽいですね。難しかったですが、リンク載せておきます。(2つ目)

参考URL:http://msdn.microsoft.com/ja-jp/library/akzyzwh9.aspx,http://loafer.jp/mixi/diary/class.xsp?2007-09-02-22-43

QVineLinuxのApplix WordファイルをWindowsで開くには

パソコン初心者です。
学校のVineLinuxのApplix Wordを使って作ったファイルを
家のWindowsXPのWordで開きたいのですが、可能でしょうか。
よろしくお願いします。

Aベストアンサー

Applix Wordでファイルを保存するときにMS wordの形式で保存すればMS wordで開くことが可能なはずです。
文章(文字データ)のみでもMS wordで開きたいのであれば、テキスト形式(*.txt)で保存すればよいと思われます。

Applix WordとMS Wordの互換性はきちんと取れていないかもしれませんので、まったく同じ表示ができるかどうかはやってみてご確認ください。

Q{x = x>y ? x:y; return x;}

#include <iostream>
using namespace std;

inline int max(int x, int y){x = x>y ? x:y; return x;}

int main()
{
int num1, num2, ans;

cout << "2つの整数を入力して。\n";
cin >> num1 >> num2;

ans = max(num1, num2);

cout << "最大値は" << ans << "です。\n";

return 0;
}
の{x = x>y ? x:y; return x;}の部分の意味が解りません。

Aベストアンサー

inline int max(int x, int y){x = x>y ? x:y; return x;}
これを普通に関数で書くと

int max(int x, int y)
{
x = x>y ? x:y;
return x;
}

です。

x = 部分は右辺の結果が代入されます。これはわかりますよね。
x>y?x:y;
と書くと?より左にある条件式を判定し、その結果が真である場合は:で区切られた左側の値を、偽である場合は右の値を帰します。
x>yが真であればxを、偽であればyを返します。
それが、左辺値xに代入され、関数の戻り値として帰ります。

従って、2つの値をこの関数に入れると、大きいほうの値が帰ることになります。

Qアプリケーションを指定してファイルを開く方法

linuxのコマンドからemacsでテキストファイルを開く場合、

emacs テキストファイル名

で開くことができたと思うのですが、これは他のアプリケーションから開く場合も

アプリケーション名 ファイル名

で開くことが可能なのでしょうか?
現在、linux環境が無いので確認できない為、どなたかご教授ください。

Aベストアンサー

一般的には開けるものと思いますがアプリケーション次第です。
正確な情報は、manなどで調べるとわかると思います。

ところで、アプリケーションを伏せる意図が理解できません。

Qtry{}catch(){}とデストラクタの関係を教えてください。

try-catchでメモリ確保を含むクラスをスローした場合、デストラクタはどの時点で働くのか、教えてください。たとえば、↓の使いかたは大丈夫でしょうか?

【1】
try{
 throw(CError(100, "エラー情報"));
}catch(CError& err){
 //ここでerrを参照しても問題ないのでしょうか?
}

【2】
try{
 CError err(100, "エラー情報");
 throw(err); // (1)
}catch(CError& err){
 //ここでerrを参照しても問題ないのでしょうか?
 //まだデストラクタはちゃんと動作するのでしょうか?
 //catchが呼び出し元のメンバであったりしても大丈夫なのでしょうか?
}

宜しくお願いします。

Aベストアンサー

【1】【2】どちらの場合も問題がありません。
コンパイラが必要に応じてerrオブジェクトのコピーを作成します。
デストラクタが呼び出されるタイミングはコンパイラに依存するところもあると思いますが、
例えばVC7.1では【2】は以下のように動作します。
(1) errオブジェクトのコンストラクタが呼び出される
(2) CErrorクラスのテンポラリオブジェクト(以下a)のコピーコンストラクタが呼び出される。
(3) errオブジェクトのデストラクタが呼び出される
(4) catch文まで到達
(5) aオブジェクトのデストラクタが呼び出される。

VC7.1では、【1】は以下のように動作します。
(1) errオブジェクトのコンストラクタが呼び出される
(2) catch文まで到達
(3) errオブジェクトのデストラクタが呼び出される。

コンパイラがオブジェクトのコピーを省略しているようです。

QWEBアプリケーションからフォルダを開く方法について。

WEBアプリケーションをPERL&CGIでつくっています。
サイトのリンクから、クリックするとフォルダが開くようにしたいのですが..LINUXとWINDOWSで違うのでしょうか。

現在このようにしており、WINDOWSのEXPLORERからは開くことができました。
<a href="file://frdc11111/DS/Lecihsf/"> LINK </a>
ただ、LINUXのMOZILLAからはクリックしても何も表示されません。

ちなみに開きたいフォルダは、違うパソコンのフォルダです。
どなたか分かる方、ぜひ教えてください。

Aベストアンサー

Mozilla のバージョンがわからないのですが、
最近のMozillaの初期設定ではfile://は開けません。
設定は大丈夫でしょうか?

↓のサイトに設定の仕方やAdd-onが紹介されています。
http://kb.mozillazine.org/Links_to_local_pages_do_not_work

参考URL:http://kb.mozillazine.org/Links_to_local_pages_do_not_work

QSystem::Drawing::Color::XXXXを変数に代入可能?

連続で質問するのも申し訳ないのですが・・・

VS2005 C++ Expressを使ってWindowsフォームアプリケーションを作っています。(C++/CLI)

ボタンなどのフォームのプロパティに、色を指定するものがあると思いますが、例えばBackColorを白に変更したい場合、
this->button1->BackColor = System::Drawing::Color::White;
のように書けると思います。

この、「System::Drawing::Color::White」の部分を変数のようにして記述したいのですが、どのように宣言した型を使用すればよいのでしょうか?
例えば仮に「System::Drawing::Color::White」がString文字列であれば、
void func1(int choice){
String^ hoge;

  if(!choice){
    hoge = System::Drawing::Color::White;
  } else {
    hoge = System::Drawing::Color::Red;
  }
  this->button1->BackColor = hoge;
}
こんな風にすると、func1(0);と呼ばれるとボタンの背景が白くなり、0以外の引数だと赤くなると思います。
ですが、System::Drawing::Color::XXXはStringではないのでできません。

この場合、hogeをどのような形で定義すればいいのでしょうか?
あるいは別の方法がありますでしょうか?

よろしくお願いします。

連続で質問するのも申し訳ないのですが・・・

VS2005 C++ Expressを使ってWindowsフォームアプリケーションを作っています。(C++/CLI)

ボタンなどのフォームのプロパティに、色を指定するものがあると思いますが、例えばBackColorを白に変更したい場合、
this->button1->BackColor = System::Drawing::Color::White;
のように書けると思います。

この、「System::Drawing::Color::White」の部分を変数のようにして記述したいのですが、どのように宣言した型を使用すればよいのでしょうか?
例えば仮...続きを読む

Aベストアンサー

#1です。
すいません。
System::Drawing::Color^ hoge;
ではなく
System::Drawing::Color hoge;
でした。


void func1(int choice){
System::Drawing::Color hoge;
  if(!choice){
    hoge = System::Drawing::Color::White;
  } else {
    hoge = System::Drawing::Color::Red;
  }
  this->button1->BackColor = hoge;
}

Qファイルとそのショートカット、開く際の違いは?

NASの中のディレクトリにExcel等のファイルがあり、
とある人はそのExcelファイルのショートカットをデスクトップに置いているとします。

このExcelファイルを、ExplorerでデスクトップからNASのディレクトリを開いてゆき、直接開くのと、
デスクトップのショートカットから開くのでは、PCやネットワークにかかる負荷のようなものに違いはありますか?

社内の人から、ショートカットからファイルが開けないというクレームがあり、
実際、ショートカットをダブルクリックすると、PCが止まるような、マウスのクリックを受け付けないような状態になり、
しばらくすると動作が元に戻って開けたり、「ファイルが見つかりません」というようなエラーで開けなかったりするのですが、
NAS上のExcelファイルを直接ダブルクリックした場合は、必ず開けます。
PCは起動/スタンバイ復帰直後などではなく、安定動作中での現象です。

NASはBuffaloの製品で、固定IP、CPUはCore2搭載、Linux搭載の新しめの製品です。

Aベストアンサー

>デスクトップのショートカットから開くのでは、PCやネットワークにかかる負荷のようなものに違いはありますか?
手順が異なりますので、状況によって応答の違いがあると思います。
エキスプローラーでNASのフォルダーを開いてから実態ファイルのダブルクリックの方はエラーになりませんが、NASの共有フォルダーに接続していない状態でショートカットのダブルクリックではNASサーバーに接続する動作が介在しますので、ワンステップの遅れを感じるでしょう。
但し、2回目以降は即座に応答があると思います。
デスクトップにショートカットを置く場合は目的の共有フォルダーをネットワークドライブに割り当てし、起動時にネットワーク接続を自動的に行う方法であれば問題が起こらないと思います。
ショートカットはネットワークドライブを開いて目的のファイルから作成してください。

QC++/CLI System::String::Fotmat 16進表記

お世話になります

C++/CLIを使用して、16進表記で悩んでいます
Format( "0x{0:x2}, 1 );
期待する値は、"0x01"ですが、"0x1"と表記されてしまいます

Formatを使用した場合は仕方ないのでしょうか?
ほかにマネージを"0x%2x"のように変換する方法を
ご存知の方がいらっしゃいましたら、御教授願います
よろしくおねがいします

Aベストアンサー

リーディング0などの書式指定は無かったと思います

String^ str = String::Format("0x{0,2:X}", 1 ).Replase(" ", "0");
などで代替処理してはいかがでしょう

{0,2:X}は 最初の引数を2桁16進数の文字列に変換されます

String::Format("0x{0,2:X}", 1 )で "0x 1"となるので
この文字列中のスペースを『0』に置換したものを取得します


人気Q&Aランキング

おすすめ情報