2011-04-04 15 views
1

私のプログラムは.txtファイルでは問題はありませんが、私のプログラムは別のファイル拡張子を持つテキストファイルを読み込む必要があります(.emuが必要です) 。単純に同じファイルの拡張子を.emuに変更すると、変数 'file'はNULLであるため、ファイルは開かれません。Cで異なる拡張子を持つ.txtファイルを読む

は周り少し見ていたので、解決策を見つけることができていない任意のヘルプは非常に

を高く評価され、ここでソースコードがあります:

void handleArgs (const char *filename, int trace, int before, int after) { 
FILE *file = fopen(filename, "r"); 
char *address = malloc(MAX_ADD_LENGTH * sizeof(char)); 
char *instruction = malloc(MAX_INS_LENGTH * sizeof(char)); 
long int addressDecoded; 

if (file == NULL || file == 0) { 
    fprintf(stderr, "Error: Could not open file"); 
} 
else { 
    if (ferror(file) == 0) { 
     while (fscanf(file, "%s %s", address, instruction) != EOF) { 
      if (strlen(address) == 8 && strlen(instruction) == 8) { 
       addressDecoded = strtol(address, NULL, 16); 
       printf("%ld\n", addressDecoded); 
       //instruction = decodeInstruction(instruction); 
      } 
      else { 
       fprintf(stderr, "Error: particular line is of wrong length"); 
      } 

     } 
    } 
} 

fclose(file); 

}

引数「ファイル名」実行時は単に '/foopath/test.emu'

+1

ファイルハンドルを開くソースコードを投稿できますか? –

+3

いくつかコードを投稿できますか?ファイルを開こうとするとそこにファイルがありますか?拡張機能は 'fopen'には何の影響もありませんので、何か別のものがあるはずです。 – rlc

+0

あなたの問題は拡張機能ではありません。 –

答えて

4

ファイル拡張子については何も特別なものはありません。ある場所でファイル名を変更するなどの単純なエラーはコードを再読み込みし、もう一方は変更しないでください。ファイル名を渡す場合は、ピリオドの左側にある部分だけでなく、名前全体を渡します。

+0

また、新しいファイルが現在作業中であること、読み込み専用に設定されていないこと、書き込みモードで開こうとしていること、ユーザーコンテキストがファイルにアクセスしていること、別のプログラムにそのファイルがないことを確認するファイルが同じ時刻(Windowsとにかく)であっても、等、等である。 – tamarintech

+0

固定で、OSXはファイルを 'test.emu'に名前変更したとき、実際には 'test.emu.txt' ' –

+0

@ウィル、そうです。私はそれに遭遇すると、常にその "機能"を無効にします。 –

1

ファイルはデータであり、名前を持っています。名前の中のドットの前に来るものは、その後のものと同じくらいのものです。拡張子は、ファイルに含まれているヒントと同じように作成されましたが、と厳密に関連付ける必要はありませんファイルの内容はです。

ファイルが存在しないか、権限でファイルを開くことができない場合があります。他にもいくつかの種類のエラーがあります。どのようにこれを診断できますか?あなたは、システムコールを使用し、それはあなたがしたいように動作しない場合

は、最後の呼び出しの状態を表す数値が含まれていますerrno.h#include <errno.h>)にerrnoと呼ばれる変数があります。これらの値に名前を付ける象徴的な定数の巨大なリストがあります。あなたはそれをグーグルにすることができます。あなたがファイルを開こうと返されたポインタは無用である場合、あなたは、ファイルが存在していたかどうかを確認するためにerrnoを点検したいと思うかもしれない、またはあなたが開いたファイルシステムの制限をexcedingしている場合たとえば

など

関連する問題