• 締切済み

OpenDialogからテキストファイルの読み込み

void __fastcall TForm1::N1Click(TObject *Sender) {     FILE *fp;      if(OpenDialog1->Execute()) { FNN1 = ExtractFilePath(OpenDialog1->FileName)         fp = fopen(FNN1.c_str(), "r" );              fread(txtdata,2,360,fp); } } [C++ エラー] Unit1.cpp(52): E2034 'AnsiString' 型は 'void *' 型に変換できない というエラーがでます。 解決方法を教えてください。

みんなの回答

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.3

「どう書き換えたら、どううまくいかない」のかを書いてくれなきゃそれに対するアドバイスもできません。

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

ExtraFilePathではドライブ名とフォルダー名までしか取れません これでfopenをしても失敗するの落ちですが … これは意図した動きなのでしょうか

deepsky11
質問者

補足

うーん、C++builderについては勉強不足です。。 図書館で探しても見つかりませんでした。 何かお勧めサイトとかありますかね?

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.1

環境というか使っているコンパイラを書きましょう。Borland C++ BuilderかC Compilerではないかと思いますが。 変数txtdataがAnsiString型のようですが、エラーの通りvoid *には変換できないのでchar配列などを使って一旦freadし、それをtxtdataに渡してやればいいのでは。

deepsky11
質問者

補足

charを使ってもうまくいきません。

関連するQ&A

  • AVIファイルを読み込む方法

    C++でプログラミング中の者です。 使っているコンポーネントはanimate、MediaPlayer、Edit、Botton、OpenDialogです。 OpenDialogで選択したファイル名をEditに表示させ、Mediaplayerを使ってAnimateに表示させるプログラミングをしたいと思っています。 なかなかうまくいかないので、アドバイスお願いいたします。 次のは現在のプログラムです。 #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { //OpenDialog1->DefaultExt = "AVI"; //OpenDialog1->FileName = "*.avi"; if(OpenDialog1->Execute()==true){ // ファイル名が選択されたときに実行する処理  Edit1->Text=OpenDialog1->FileName; //Edit1に選択したファイル名を表示 //Animate1->Active=LoadFromFile(OpenDialog1->FileName); } } //--------------------------------------------------------------------------- void __fastcall TForm1::Edit1Change(TObject *Sender) { MediaPlayer1->Open(); MediaPlayer1->Play(); } //---------------------------------- よろしくお願いします。

  • バイナリ形式の読み込み

    void __fastcall TForm1::LoadData() { FILE *fp; int XYData[36000],I; AnsiString A; fp = fopen( "C:\\test1\\¥A.rdt", "rb" ); if( fp == NULL ){ ShowMessage("file open error\n" ); exit( 1 ); fread(XYData,2,70000,fp);         for(I=0;I<3600; I++){ A=XYData[I]; Memo1->Lines->LoadFromFile(A); } fclose(fp); } } これでメモに表示させたかったのですがうまく表示されてません。 読み込めていないのか、使い方が間違ってるのかわからないので指導よろしくお願いします。

  • 動的に作ったリッチエディットのイベント

    toshi_ynと申します。 動的に作ったRichEditのサイズを調整できるようにOnResizeRequestイベントを 設定したつもりなのですが、コンパイルでエラーがでます。 いろいろなTipsを見ながら作ったので、どこが間違っているのか 分からず困っております。 こちらの環境はWIn98, Borland C++Builder Ver.4です。 どなたか、助けをお願いします。 [C++ エラー] Calender1.cpp(1092): E2034 Cannot convert 'void (_fastcall * (_closure )(TObject *,TRect &))(TObject *,TRect &)' to 'void (_fastcall * (_closure )(TObject *,const TRect &))(TObject *,const TRect &)'. //--コード-- Unit.h private: // ユーザー宣言 void __fastcall TForm1::Redit_ResizeRequest(TObject *Sender,TRect &Rect); Unit.cpp //----------- Redit[Num] =new TRichEdit(Owner); Redit[Num]->Parent = pnl[Num]; Redit[Num]->BorderStyle=bsNone; Redit[Num]->ScrollBars=ssNone; Redit[Num]->ReadOnly=true; Redit[Num]->Tag=Num; Tag=Num; Redit[Num]->Width=10; Redit[Num]->Height=10; Redit[Num]->PlainText=false; Redit[Num]->Cursor=crArrow; Redit[Num]->OnMouseDown=Redit_MouseDown; Redit[Num]->OnDragOver=Redit_DragOver; Redit[Num]->OnResizeRequest=Redit_ResizeRequest; ←ここでエラー //------------- void __fastcall TForm1::Redit_ResizeRequest(TObject *Sender,TRect &Rect) { Redit[Tag]->BoundsRect = Rect; } //------------

  • BCBでフォームの印刷

    Borland C++ Builder 5(Pro)を使っています。 TForm上にTImageを乗せ、そこにPolyline等で図形を描いています。 それを印刷したいのですが、TImageにはPrintメソッドがないので、 TFormのPrintメソッドを呼び出していますが、印刷できません。 プリンタのジョブを監視していると、何も印刷せずに「印刷済」になっています。 印刷ボタン、印刷設定ボタンのOnClickは以下のようになっています。 間違い等ありましたらご指摘ください。 // 印刷ボタン void __fastcall TGraphForm::PrintButtonClick(TObject *Sender) {   if(PrintDialog->Execute()){     GraphForm->Print();   } } // 印刷設定ボタン void __fastcall TGraphForm::PrtSetupButtonClick(TObject *Sender) {   PrinterSetupDialog->Execute(); }

  • builder c++

    参考書に載っている読み込みの例題なんですが、 void__fastcal1 TForm1:: Button1Click(TOject*sender) { OpenDialog1->Execute(); ifstream fin; fin.open(OpenDialog1->FileName.c_st5r()); if(!fin){ ShowMessage(""); exit(1); } ....... } で実行するとエラーで"未定義のシンボルOpendialog1"と出てきてうまくいきません。どうすればうまくいきますか?

  • クラスのメンバ変数の宣言方法

    現在、プロジェクト内に”class PACKAGE TNumberEdit : public TEdit”というクラスを持った”NumberEdit.h”、”NumberEdit.cpp”ファイルを追加して、 Unit1.hファイル内の”class TTestForm : public TForm”このクラス内のpublicにメンバ変数として ”TNumberEdit *NumberEdit1;” このように宣言しました。 そして、 __fastcall TTestForm::TTestForm(TComponent* Owner) : TForm(Owner) { NumberEdit1 = new TNumberEdit(this); } //--------------------------------------------------------------------------- このようなプログラムを書くと次のようなエラーが出てきます。 [ILINK32 エラー] Error: 未解決の外部参照 'TNumberEdit::' が C:\MYWORK\....\CPP_BUILDER_2009\TEST_NUBEREDIT\DEBUG\UNIT1.OBJ から参照されました [ILINK32 エラー] Error: 未解決の外部参照 '__fastcall TNumberEdit::TNumberEdit(Classes::TComponent *)' が C:\MYWORK\.....\CPP_BUILDER_2009\TEST_NUBEREDIT\DEBUG\UNIT1.OBJ から参照されました このようなエラーを回避する方法はありますでしょうか?どうぞ教えて頂きますよう、お願い致します。

  • bmpやImageの配列を関数の引数で渡す

    C++BuilderXE2starterです。 ビットマップ(bmp)やTImage を配列で定義し、関数の引数として渡したいのですが よくわからないまま、次のようにすると、色んな不正な使い方らしきエラーとなります。 正しい使い方を教えてください。 なお配列でないbmpを渡すことはできます。ImageはIDEで定義するのではなく、プログラムから生成させる積もりです。 最終的にやりたいスタイル。 void __fastcall TForm1::onclick(TObject *Sender) { int n; Graphics::TBitmap *bmp[10]; TImage::Image *Imagenum[10]; for(n=0;n<10;n++){ bmp[n]=new Graphics::TBitmap(); Imagenum[n]=new TImage::TImage; // bmp,Imagenum のサイズ位置の設定 Imagenum[n]->Top= 値; Imagenum[n]->Left= 値; } sub(bmp,Imagenum); Free(bmp); // for でまわす要あり? Free(Image); } //--------------------------------------------------------------------------- void TForm1::sub2(Graphics::TBitmap *bmp[], TImage *Imagenum[]) { Image[0]->Canvas->Draw(0,0,bmp[0]); Image[1]->Canvas->Draw(0,0,bmp[1]); } unit.h class TForm1 : public TForm { __published: // IDE で管理されるコンポーネント TButton *Button1; void __fastcall onclick(TObject *Sender); private: // ユーザー宣言 void TForm1::sub(Graphics::TBitmap **bmp, TImage **Image); public: // ユーザー宣言 __fastcall TForm1(TComponent* Owner); };

  • BCB  読み込み。

    OpenDialogでバイナリファイルを読み込むのですが、、 同じフォルダに同じファイルネームで形式が違うものを同時に読み込みたかったので。(A.txt A.dat B.txt B.dat....) ///// FILE *fp; if(OpenDialog1->Execute()) {          A1 = ExtractFilePath(OpenDialog1->FileName); A2 = ExtractFileName(OpenDialog1->FileName); A3 = ChangeFileExt(A2,"");        FN1 = A1 + A3 +".dat"; FN2 = A1 + A3 +".txt"; fp = fopen("FN1", "rb" ); fread(Data,2,3000,fp); } ///// FN1とFN2をメモ確認してみたところFN2の方はそのままのファイルの中身が表示されましたが、FN1はそのdatファイルの絶対パスが表示されたので上のようにやってみたのですがうまく読み込めませんでした。 ご指導の方お願いします。

  • テキストをAnsiStringに一括して読む

    C++BuliderXE2です。 テキストファイル(改行はない)をAnsiString にファイルサイズに関係なくC++で一括して読み込みたいのです。 fopen()、fread()などを使えばもちろんできるのですが、今回はC++でやってみようとしています。 下記の3通りを試したところ#1、#3は文法エラーはありませが、やりたいのは#2のような使い方で、 [BCC32 エラー] getratehtmlfile.cpp(445): E2288 -> か ->* の左には構造体のポインタが必要 となります。これはAnsiStringのメンバーのLoadFromFileがないということになるのでしょうか。 もちろん、可能な形式で読んだあと、AnsiStringに変換することは考えられますが、 #2のようなやりかたはできないのか教えて下さい。KoadFromFile以外ではどうでしょうか。 newの使い方も自信がありません。 AnsiString *astr=new AnsiString; TStringList *slist=new TSringList; slist->LoadFromFile("file.txt"); // #1 astr->LoadFromFile("file.txt"); // #2 Memo1->Lines->LoadFromFile("file.txt"); //#3 delete(astr); delete(slist);

  • テキストボックスのファイルパスでfp=open

    C++ Builder2009でプログラムやってます。 テキストボックスEdit2-Textにファイルパスが入っているので、 fp = fopen( Edit2->Text , "wb" ); このようにしてファイル出力を行おうとしたら次のようなエラーが出てきました。 [BCC32 Error] Unit1.cpp(384): E2034 Cannot convert 'UnicodeString' to 'const char *' [BCC32 Error] Unit1.cpp(384): E2342 Type mismatch in parameter '__path' (wanted 'const char *', got 'UnicodeString') エラー内容だと”Edit2-Text”はUnicodeString型なので、fp = fopen にはconst char *っていう型にしないといけないという意味だと思うのですが、fopenでファイルパスをテキストボックスから渡すにはどのようにしたらよいか、ご教授よろしくお願い致します。

専門家に質問してみよう