2011-07-26 6 views
0

私はサイトを検索しましたが、私の問題に対する答えは見つかりませんでした。forループでCのfwriteを使用しています

私のプログラムはイメージを出力し、サイクルイテレーションの後に生成された各イメージを別のファイルに保存します。ファイルを保存する

私のコードは、私は、出力ファイルの名前を1つの整数の変数を追加したいこの

FILE *fobjecto; 
if ((fobjecto = fopen ("OSEM.ima", "wb")) != NULL)     
{ 
    printf("Writing reconstructed image file"); 
    fwrite (objecto, sizeof(float), (detectorXDim)*detectorYDim*(NSlices-1), fobjecto);  
    fclose (fobjecto);  
}  
else  
    printf("Reconstructed image file could not be saved"); 

ですが、私は「」「+」とで遊んで試してみましたが、私はそれを解決することができませんでした。事前に

おかげ

+0

この数字はどれくらい大きくなることができますか? – vsz

答えて

6

あなたは、いくつかのsprintfのようなフォーマットされた出力動作(またはより良いその安全ツインsnprintf)が必要になります。あなたがそれを開く前に、

char buf[512]; // something big enough to hold the filename 
unsigned int counter; 
FILE * fobjecto; 

for (counter = 0; ; ++counter) 
{ 
    snprintf(buf, 512, "OSEM_%04u.ima", counter); 

    if ((fobjecto = fopen(buf, "wb")) != NULL) { /* ... etc. ... */ } 

    // Filenames are OSEM_0000.ima, OSEM_0001.ima, etc. 
} 
+1

1000文字は20文字を超えないように少し大きめです。 –

+0

あなたは最初にそこにいます:)しかし、あなたは 'fopen'行を修正したいかもしれません... – MByD

+1

いいえOK ... :-) –

5
char file_name[256]; 

sprintf(file_name, "OSEM%4.4d.ima", iteration_count); 

if (NULL!=(fobjecto=fopen(file_name, "wb"))) 
    // ... 
2

は、ファイル名を作成:

char filename[256]; 
//... 
sprintf(filename, "OSEM%08X.ima", someIntegerToAddAsHex); 
if ((fobjecto = fopen (filename, "wb")) != NULL)  
//... 
関連する問題