2009-03-20 11 views
0

DOSでDJGPPを使用してバイナリファイルを読み取っているときに、このコードがハングします。 これはfreadコールが行われたときに発生します。コールが削除されると、プログラムは正常に実行されます。 同じコードがVisual C++ 2008で正常に動作します。 djgppで同様の問題が発生した人はいますか? 本当にシンプルなものが欠けていますか?DJGPPでfreadエラーが発生する

char x; 
string Filename = "my.bin" ; 
fp = fopen(Filename.c_str(),"rb"); 

if (fp == NULL) 
{ 
    cout << "File not found" << endl ; 
} 

if (fseek (fp, 0, SEEK_END) != 0) 
{ 
    cout <<"End of File can't be seeked"; 
    return -1; 
} 

if ((fileLength = ftell(fp)) == -1) 
{ 
    cout <<"Can't read current position of file"; 
    return -1; 
} 

if (fseek (fp, 0, SEEK_SET) != 0) 
{ 
    cout <<"Beginning of File can't be seeked"; 
    return -1; 
} 

if (fread(&x,sizeof(x),1,fp) != sizeof(x)) 
{ 
    cout <<"file not read correctly"; 
    return -1; 
} 
+0

freadの最初の引数は必ずxだけでなく&xでなければなりません。これは、charバッファへのポインタを必要とします。ただcharにします。 –

+0

はい、私はそれを修正しました。私はまだハングアップします。 – vivekian2

+0

注:ファイルが見つからないときはエラーはありません(スタイルの点など) – KevinDTimm

答えて

2
  • 私は 'FP' は何であるか表示されません。私はそれが 'FILE * fp;'だと仮定しなければなりません。

  • 実際に< stdio.h>が含まれているとは限りません。

  • 実際に< iostream>が含まれていて、「using namespace std;」と宣言しているとは限りません。

  • 呼び出しが成功したかどうかを示すfread()呼び出しの後には何も表示されません。実際にエラーを再現するために絶対はなく、完全な最低限にあなたの障害のあるコードを還元する工程を経

は、コードの一部は、あなたが唖然と持っているときに最初にすべきことです。

問題があなたが思ったところでさえそうでないことが判明するかもしれません(通常はそうです)。言われていること

、I ')は(perrorは' を使用して

int i; 
if ((i = fgetc(fp)) == EOF) 
{ 
    perror("File not read correctly"); 
    return -1; 
} 
x = (char) i; 
cout << "Success, read '" << x << "'." << endl; 

if (fread(&x,sizeof(x),1,fp) != sizeof(x)) 
{ 
    cout <<"file not read correctly"; 
    return -1; 
} 

を交換してみたい代わりにhomebrewn coutのメッセージのあなたに、エラーの原因に関する追加情報を提供します。 'fgetc()'を使用すると、ファイルにはあなたが思っていることが実際に含まれていることがわかります。また、fread()の単なる1バイトの使用にはまれな問題ではありません。

次に報告してください。

+0

@DevSolar問題は、このコードの前に多少行っていた何らかの理由で発生しました。ファームウェアをオフにしてfread()を失敗させました。あなたは正しい方向を指しています - 「問題はあなたが思ったところでさえそうではありません」 – vivekian2

0

freadは、最初のパラメータとしてポインタをとります。 1文字だけを読み込む必要がある場合は、char x;は問題ありませんが、代わりにxのアドレスを渡してください。

fread(&x,sizeof(x),1,fp) != sizeof(x) 

およびsizeofはchar以来、常に1(定義)あなたは非常によく書くことができます:

fread(&x,1,1,fp) != 1 
+0

がまだハングします。 – vivekian2

関連する問題