Create a file if one doesn't exist - C Create a file if one doesn't exist - C c c

Create a file if one doesn't exist - C


You typically have to do this in a single syscall, or else you will get a race condition.

This will open for reading and writing, creating the file if necessary.

FILE *fp = fopen("scores.dat", "ab+");

If you want to read it and then write a new version from scratch, then do it as two steps.

FILE *fp = fopen("scores.dat", "rb");if (fp) {    read_scores(fp);}// Later...// truncates the fileFILE *fp = fopen("scores.dat", "wb");if (!fp)    error();write_scores(fp);


If fptr is NULL, then you don't have an open file. Therefore, you can't freopen it, you should just fopen it.

FILE *fptr;fptr = fopen("scores.dat", "rb+");if(fptr == NULL) //if file does not exist, create it{    fptr = fopen("scores.dat", "wb");}

note: Since the behavior of your program varies depending on whether the file is opened in read or write modes, you most probably also need to keep a variable indicating which is the case.

A complete example

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;}