2011-07-26 3 views
0

J'ai recherché le site et je n'ai pas trouvé de réponse à mon problème.Utilisation de fwrite de C dans une boucle for

Mon programme génère une image, et je veux enregistrer dans un fichier différent, chaque image produite après une itération de cycle.

Mon code pour enregistrer des fichiers est ce

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"); 

Je veux ajouter une variable entière au nom du fichier de sortie, je l'ai essayé de jouer avec « + » et « » mais je ne pouvais pas le résoudre.

Merci à l'avance

+0

Quelle peut être la taille de ce nombre? – vsz

Répondre

6

Vous aurez besoin d'une opération de sortie formatée comme sprintf (ou mieux encore son jumeau sécurité 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 est un peu gros pour quelque chose qui ne dépassera pas 20 caractères. –

+0

Vous y êtes arrivé en premier :) mais vous pourriez vouloir corriger la ligne 'fopen' ... – MByD

+1

Très bien OK ... :-) –

5
char file_name[256]; 

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

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

construire le nom du fichier avant de l'ouvrir:

char filename[256]; 
//... 
sprintf(filename, "OSEM%08X.ima", someIntegerToAddAsHex); 
if ((fobjecto = fopen (filename, "wb")) != NULL)  
//... 
Questions connexes