lenguaje - Crea un archivo si no existe uno-C
fwrite en c (2)
Quiero que mi programa abra un archivo si existe, o bien crea el archivo. Estoy intentando el siguiente código pero obtengo una afirmación de depuración en freopen.c. ¿Sería mejor utilizar fclose y luego abrir inmediatamente después?
FILE *fptr;
fptr = fopen("scores.dat", "rb+");
if(fptr == NULL) //if file does not exist, create it
{
freopen("scores.dat", "wb", fptr);
}
Normalmente tiene que hacer esto en un solo syscall, o de lo contrario obtendrá una condición de carrera.
Esto se abrirá para lectura y escritura, creando el archivo si es necesario.
FILE *fp = fopen("scores.dat", "ab+");
Si quieres leerlo y luego escribir una nueva versión desde cero, hazlo como dos pasos.
FILE *fp = fopen("scores.dat", "rb");
if (fp) {
read_scores(fp);
}
// Later...
// truncates the file
FILE *fp = fopen("scores.dat", "wb");
if (!fp)
error();
write_scores(fp);
Si fptr
es NULL
, entonces no tiene un archivo abierto. Por lo tanto, no puedes freopen
, solo debes fopen
.
FILE *fptr;
fptr = fopen("scores.dat", "rb+");
if(fptr == NULL) //if file does not exist, create it
{
fptr = fopen("scores.dat", "wb");
}
Nota : Dado que el comportamiento de su programa varía según si el archivo se abre en modo lectura o escritura, probablemente también necesite mantener una variable que indique cuál es el caso.
Un ejemplo completo
int main()
{
FILE *fptr;
char there_was_error = 0;
char opened_in_read = 1;
fptr = fopen("scores.dat", "rb+");
if(fptr == NULL) //if file does not exist, create it
{
opened_in_read = 0;
fptr = fopen("scores.dat", "wb");
if (fptr == NULL)
there_was_error = 1;
}
if (there_was_error)
{
printf("Disc full or no permission/n");
return EXIT_FAILURE;
}
if (opened_in_read)
printf("The file is opened in read mode."
" Let''s read some cached data/n");
else
printf("The file is opened in write mode."
" Let''s do some processing and cache the results/n");
return EXIT_SUCCESS;
}