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”とかの意味がよくわかりません。
どうかご教授お願いいたします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

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



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

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

参考URL:http://msdn.microsoft.com/ja-jp/library/akzyzwh9 …
    • good
    • 0
この回答へのお礼

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

資料のURLも載せてもらい、ありがとうございます。
それで、​http://msdn.microsoft.com/ja-jp/library/akzyzwh9 …こちらのリンクで、同じような例文が書かれいて、

”StreamReader* objReader = new StreamReader("c:\\test.txt");”
テキスト文を”StreamReader”で宣言したobjReader変数に渡している文なんですが、
”StreamReader*”という書き方をしているのですが、”System::IO::StreamReader”という書き方とは違うのですが、これには何か理由があるのでしょうか? ”System::IO::”このコロンで挟んだりして書いたりする文というのはどうゆうことを表しているのでしょうか?

どなたかご存じでしたらご教授いただけませんでしょうか?

お礼日時:2009/05/25 13:15

C++/CLIの基本的な構文ですねー。


大雑把に書くと、System名前空間の下のIO名前空間の下の
StreamReaderクラスのインスタンスを、ガベージコレクタの対象として
(すなわちマネージヒープに)作成し、そのハンドルをsrに持ちましょう、ということです。

なので、
System::IO::StreamReaderは
System名前空間の下のIO名前空間の下のStreamReaderクラス
gcnewは
マネージヒープ上にインスタンスを作成しなさい
となるのかな。

ここら辺の意味が理解不能ならば、まずは入門用の
書籍やWebサイトを参照することをオススメします。
    • good
    • 0
この回答へのお礼

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

”System::IO::StreamReader”このような書き方はC++言語の特徴だそうですね。

C++言語の入門学習WEBページの
http://www.asahi-net.or.jp/~yf8k-kbys/newcpp3.html
”C++によるプログラミング入門3 cinを使った入力”

に同じような記述がありました。


ちょっと基本的なことを見ながらC++プログラミングをやっていきたいと思います。

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

このQ&Aに関連する人気のQ&A

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

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

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

Qioデータの無線LAN 

今、IOデータの無線LANルーターWN-APG/A のファームウェアをしたんですが、したとたんioデータのホームページだけ接続できなくなりました。他のホームページは見れるのですがIOデータだけ見れません。
どなたか、解決方法を教えてください。

かなり、初心者です。

Aベストアンサー

>ioデータのホームページだけ接続できなくなりました。
 http://www.iodata.jp/
 これでもホームページにはいれないのでしょうか ???

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;
}

QHDでIOデータとバファローはどちらがいいと思いますか。

現在IOデータの320GBとバファローの160GBのいずれもUSB接続で使っています。
IOデータはコンパクトで熱くならなくていいのですが、少しうるさいです。バファローは静かですが、とにかく熱い。
どちらのメーカーも使ったことある人でこれ以外によい特徴又は悪い特徴のあった人の意見を聞きたいと思います。

Aベストアンサー

>…とにかく熱い。…

実際に中に使用されているハードディスクは市販されている
ハードディスクメーカのOEM製品でメーカや型式などの違いは
あるものの殆ど内容は同じです。

故に発熱などの条件も同じで、ケースに入っている状態で両者の
場合はどちらが良いかとなると、「放熱効率が良い=熱くなる」
と言う事になります。機器の寿命や性能などの面で言えば放熱が
かなり左右しますので、私も両者製品を所有していますが同じ
性能、似たような仕様ならば、
「ケース表面温度は高いが物理的に排熱効果・効率が高い」BUFFALO社
製品の方をお勧めします。

製品にも拠りますが、I/Oデータ製はセキュリティー面重視、BUFFALO製
は使い勝手重視に重点があるようにみえます。

所有の製品で両社製品共に私の場合はトラブルなどはどちらも無いです
が、知人やここの掲示板などではI/Oデータ製品のトラブルなどの質問
や故障が多少、多いようにも見られます。

参考までに・・・

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』に置換したものを取得します

QIOデータのダイナミックDNSサービスを使用したい

いつも助かります。
いま、会社でnetscrren-5GTというのが入っていて
社内にIOデータのNAS(LAN DISK HDLP-G500)があります。

IOデータではダイナミックDNSサービスというのがあるらしく
登録して使用しようとしてます。

しかしながらポート解放というのが必要らしく
おそらくルータをいじらないといけないと思いますが
どのようにやればよろしいのでしょうか?

よろしくお願いします

Aベストアンサー

IOデータのダイナミックDNSサービスは通信(転送)エラーが多く不安定なのでお勧めできませんよ。
またポート開放をすると社内ネットワークが危険にさらされる可能性があるのでココに質問される程度のネットワーク&セキュリティ知識の方にはお勧めできませんしやめて貰いたいです。
社内ネットワークから情報流出したりアタック受けて業務に支障が出てもも構わないと言うなら別ですけど。

QVC++  System::Stringに変換するには?

現在VisualC++ ExpressEditionを使って、C++の勉強をしながら万年カレンダーを作ろうとしていています。

ひとまずカレンダーの表示に使う月・日・曜日をDateTime::Nowから取り出したいのですが、
DateTime d1 = DateTime::Now.AddMonths;
label1->Text = d1.ToShortTimeString;
と試しにlabelに現在の月を表示させようとしたところ、
「1 番目の引数を 'System::String ^(__clrcall System::DateTime::* )(void)' から 'System::String ^' に変換できません。」
というエラーメッセージとともに弾かれてしまいます。
どこをどう変えればよいのか教えてください。

勉強を始めるのに買ってきた参考書では、DateTime::Now.ToLongTimeString;で日付から時刻まで繋げて表示する方法しか載っていませんでした(索引にもDateTime::Nowのみ)
PCで検索しようとしても別の言語や参考書のHPが大量に引っかかって困っています。

現在VisualC++ ExpressEditionを使って、C++の勉強をしながら万年カレンダーを作ろうとしていています。

ひとまずカレンダーの表示に使う月・日・曜日をDateTime::Nowから取り出したいのですが、
DateTime d1 = DateTime::Now.AddMonths;
label1->Text = d1.ToShortTimeString;
と試しにlabelに現在の月を表示させようとしたところ、
「1 番目の引数を 'System::String ^(__clrcall System::DateTime::* )(void)' から 'System::String ^' に変換できません。」
というエラーメッセージとともに弾かれてし...続きを読む

Aベストアンサー

DateTime d1 = DateTime::Now;
label1->Text = d1.ToString("yyyy年MM月dd日(ddd)dddd");
を試そう(実際にやってみた訳じゃないのでダメかもしんない)

QioデータのmagicTV gv-mvp/fz2の音声が出ません

ioデータのmagicTV gv-mvp/fz2の音声が出ません、モニターは同じくIOデータのスピーカ内蔵モニターでHDMIとDVIの変換ケーブル使っています。ミニプラグケーブル使っています。パソコンはHP pavilion 500-210pです・・・・教えてください・・・音のだしかた

Aベストアンサー

パソコンの音声出力端子とモニターの音声出力端子をケーブルで繋ぐ




DVIをHDMIに変換してスピーカー付きのモニター接続とありますが

元のDVI端子は、音声信号も出力するタイプのDVIでしょうか?(普通は映像信号だけしか出力しないDVI端子です)

お使いのPCのサウンドカードが、ATIやAMDの製品を使用している場合でサウンド機能内蔵のグラフィックボードであるならは、DVIに音声信号と映像信号を出力していますから、それをHDMIに変換しても、モニターに音声信号が行きますが

そうじゃないただの映像用信号しか出さないDVIであれば、接続しても音声は出ませんので、別途音声用ケーブルでPCとモニターを繋ぐか、スピーカーを用意しなければいけません


pavilion 500-210p
 オンボードのグラフィックカードなら、DVIから音声信号は出ていません (^_^;

QSystem::Stringからconst charへの変換

aという変数がSystem::String型であります。
そこで次に行いたい処理のために、const char*に変換したいのですが、下記のページを参考にプログラムしてみたのですがうまくいきませんでした。
うまくいかなかったというのはまだSystem::String型のままで変換できていなかったとエラーで出てしまいます。
そのような場合は、どのように型変換すればよいのでしょうか?

Aベストアンサー

あ~PtrToStringCharsだけだとconst char*は取れなかったですね。
wcstombs_sと組み合わせないと。
System::Runtime::InteropServices::Marshal::StringToHGlobalAnsiのほうが楽かな。
(つかい終わったらSystem::Runtime::InteropServices::Marshal::FreeHGlobalが必要)


strcmp等のconst char*を引数にとるような関数ではなく、
wcscmp等のconst wchar_t*を引数にとるような関数ならPtrToStringCharsだけでOK。


まぁ、Stringクラスを使っているから、str~の関数をあえて使うような
無駄なことはふつうはしないでしょうけど。

Q外付けHDDを、買う予定ですが、IOデータのを買うか、バッファローのを

外付けHDDを、買う予定ですが、IOデータのを買うか、バッファローのを買うか迷っています。どちらが、いいですか。

Aベストアンサー

IOもバッファローも外付けHDDはたくさん種類が有ります。
何をどう迷っているのでしょうか?
自分なら、形状、容量など自分の欲しい物が有れば安い方です。

Qfoo1.txt、foo2.txt、foo3.txt…とファイル名をつけたいとき

プログラムの一部でファイルを作成しておりまして、
foo1.txt、foo2.txt、foo3.txt…のように
foo+変数.txtとなっており、変数を変える(増やす)ことで複数のファイルを作っていきたいのですが、

このように作成したいファイル名の途中に変数を含んでいる場合、どのようにすればよいのかをご教授願います。

現在、ファイルを作成する関数(関数の中身はおそらく関係してこないと思うので割愛させていただきます)を作成し、
make("foo.txt")のように記述しておりますが詰まってしましました。
どうぞ宜しくお願いします。

Aベストアンサー

つまり
char str[16];
int count;
for(count = 0; count < 10; count++)
{
sprintf(str,"foo%d.txt",count + 1);
}
とすると
strにファイル名が入っている。


人気Q&Aランキング