バイナリファイルの読み込み方法について

このQ&Aのポイント
  • OpenDialogを使用してバイナリファイルを読み込む方法についてご教示ください。
  • 同じフォルダに異なる形式のファイルを同時に読み込む方法についても知りたいです。
  • ファイルの絶対パスが表示されずに正しく読み込む方法があれば教えてください。
回答を見る
  • ベストアンサー

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ファイルの絶対パスが表示されたので上のようにやってみたのですがうまく読み込めませんでした。 ご指導の方お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • mtaka2
  • ベストアンサー率73% (867/1179)
回答No.1

> fp = fopen("FN1", "rb" ); 「FN1」というファイル名のファイル読み込みになってますね。 fp = fopen(FN1.c_str(), "rb"); にしないとダメでしょう。 あと、FN1とFN2の生成では、ExtractFilePath/ExtractFileName は無駄です。 FN1 = ChangeFileExt(OpenDialog1->FileName, ".dat"); FN2 = ChangeFileExt(OpenDialog1->FileName, ".txt"); だけで十分。

rarapico
質問者

補足

うまく動作しました。助かりました。 前回同様ありがとうございました。

関連するQ&A

  • 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 *' 型に変換できない というエラーがでます。 解決方法を教えてください。

  • バイナリで書き込みましたがエラーが出る。原因は?

    拡張子を.wavとしてあるa.wavというファイルがあります。 fopenとfread関数を用いて以下のように読込み、 fp = fopen("a.wav","rb"); fread(data[0],4,1,fp); fopenとfwriteを用いてb.wavファイルに以下のように書き込みました。 fa= fopen("b.wav","wb"); fwrite(data[0],4,1,fa); 書き込んだb.wavファイルですが、 バイナリエディタStirlingでa.wavとb.wavファイルの中身を比較したら中身は同じでした。 しかし、a.wavファイルでは音が出力されるのに、b.wavファイルでは音が出力されずエラーが出ます。 この原因はいったいなんでしょうか? 原因がわかる方がいましたら教えていただけないでしょうか? よろしくお願いいたします。

  • プログラム BCB

    for (int I = 1; I <=20 ; I++){   pass = ID +"0"+IntToStr(I); fp = fopen(pass.c_str(), "rb" ); fread(data,2,10,fp); } と途中まで作ったのですが、この20個の読み込んだ配列データを20個別々にA1~A20(AnsiString)みたいな感じで格納したいのですがやりかたがわからないのでアドバイスください。

  • objective-cで、バイナリの読み込みに関して。

    objective-cで、バイナリの読み込みに関して。 バイナリファイルが容易してあり。 例えば Cで下のようなソースで読み込みできるとします。 typedef struct tagTTestStruct { int data1; int data2; char data3; } TTestStruct; int main() { TTestStruct testdata; FILE *fp; fp = fopen( FILENAME , "rb" ); fread( &testdata , sizeof( testdata ) , 1 , fp ); fclose( fp ); printf( "data1 = %d , data2 = %d , data3 = %d\n" ,testdata.data1,testdata.data2,testdata.data3 ); return 0; } これを、objective-cらしく書くにはどうしたらいいのでしょうか、、、 nsdataやnsarchiverを調べてみたのですが、よくわからないんです。 また、参考になるようなサイトがあればおしえてほしいです。

  • fread

    freadで、a.txtの内容を画面出力するものです。 コピーした結果、 実際のテキストにある、 !  が書き込まれませんでした。 どこが、間違っているか教えてください。 FILE *fp; char str[20];   fp=fopen("a.txt","rb");   while(!feof(fp)){      fread(&str,(sizeof(str)-1),1,fp);      if(feof(fp))            break;      printf("%s",str); }      return 0; }

  • fread

    fread関数を使用し、下記のように 同じファイルに上書きしているのですが。。。。 freadで取得したデータの全角コロンを半角コロンに置き換える。 その後、全角空白を半角空白におきかえる。 そのおきかえたデータを同じファイルの上書きする。 どうもコロン(:)のところがうまく書き変えられていません。。。。 おきかえた後に、print文で出力すると置き換えられているのですが、、、 この現象がわかる方教えていただけませんか?? $body=fread(fopen($fileName, "r"),filesize($fileName)); $txt=str_replace(":", ":",$body); $txt=mb_convert_kana($txt, "s","SJIS"); $fp = fopen($fileName, "w"); chmod($fileName,0777); flock($fp, LOCK_EX); fputs ($fp, $txt); flock($fp, LOCK_UN); fclose($fp);

    • ベストアンサー
    • PHP
  • バイナリ形式の読み込み

    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); } } これでメモに表示させたかったのですがうまく表示されてません。 読み込めていないのか、使い方が間違ってるのかわからないので指導よろしくお願いします。

  • fread関数の使い方がわかりません。

    以下のプログラムで試しているのですが、コンパイルはできても各配列の要素が表示されません。なぜなんでしょうか? #include<stdio.h> main() { FILE *fp; int i,b[10]; char a[10]; gets[a]; //ファイル名を指定 fp = fopen(a,"rb"); //バイナリモードでオープン fread(b,3,10,fp);   //配列に3byteづつ書き込んだつもり for(i=0;i>=9;i++){ printf("%02x\n",b[i]); //この部分の表示がされない。 } fclose(fp); } レベルの低い質問ですいませんがよろしくお願いします。

  • C言語でファイルを出力

    ファイルの中に変数をいれて複数のファイルをつくろうとしたのですが、 できたファイルの後に?マークがついてきます。 file = fopen("filename.txt", "w"); for(j=0; j<30; j++){ fprintf(file ,"%d.dat\n",j ); } fclose(file); file2 = fopen("filename.txt", "r"); として、ファイル名を書いたファイルをつくってから、 for(k=0; k<30; k++){ fgets(fp,sizeof(fp),file2); file_out = fopen(fp,"w"); 省略 fprintf(file_out, %e %e \n",a ,b); fclose(file_out); } fclose(file2); をして、30個のファイルを出力すると、 0.dat? 1.dat? 2.dat? . . . 29.dat? というファイルができてしまいます。 ファイルの中はしっかりできています。 なにか解決法を知っている方がおりましたら、どうか教えて下さい。

  • ファイルの入力、出力

    #include<stdio.h> int main(){ int a,b; FILE *fp0, *fp1;   fp0 = fopen("test1.dat", "r"); if( fp0 == NULL ){ printf("Cannot open test1.dat"); exit(1); } fp1 = fopen("file.txt", "w"); while((fscanf(fp0, "%d %d", &a,&b)) != EOF){ fprintf(fp1, "%d %d\n", a*a,b*b); } fclose(fp0); fclose(fp1); return(0); } test1.datファイルを読み込んで、変数a,bに値をいれ、 その二乗結果をfile.txtに書き込むプログラムなのですが test1.datファイルに書き込まれてる値をどのようにa,bに代入されているのかわかりません。 例えば test1.datが 1 2 3 4 5 であると、 file.txtには 1 4 9 16 25 16 と書き込まれています。 test1.datが 1 1 2 2 3 3 であると file.txtには 1 1 4 4 9 9 となっています。 どのように、変数に値が入るのでしょうか??

専門家に質問してみよう