2

First off all: I know, some similar problems have been there before, but it does not work for me.

I need to create a .txt file in C which is called "year/month/day_hour :minute

My code is:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
int main(){
int hours, minutes, seconds, day, month, year;
char fileSpec [255];
//TIME for file name
    time_t now;
    time(&now);
    printf("Today is : %s", ctime(&now));
    struct tm *local = localtime(&now);
 
    hours = local->tm_hour;          
    minutes = local->tm_min;         
    seconds = local->tm_sec;         
 
    day = local->tm_mday;            
    month = local->tm_mon + 1;       
    year = local->tm_year + 1900;   
      
    //Time block end

    //create file
    FILE * fPointer;
    snprintf( fileSpec, "%04d_%02d_%02d_%02d:%02d.txt",year,month,day,hours,minutes); //From another post. I do not exactly know the syntax
    fPointer = fopen(fileSpec,"w");
    fprintf(fPointer ,"Date and Time of creation: %d/%d/%d %d:%d:%d\n",day,month,year,hours,minutes,seconds);
}

Sry for my strange formatting :/

I am still quite a beginner.

Edit: The whole code is: https://pastebin.com/78fSRJgx

Ninto 1
  • 67
  • 7
  • 3
    You should state what your actual problem is. But I guess it stems from using / in a filename. That doesn't work as that separates directories. – koder Jan 22 '21 at 09:31
  • You need to `fclose(fPointer);` – pmg Jan 22 '21 at 10:55

2 Answers2

1

I had a similar issue one time on Android and I've spent hours trying to figure out the issue. It turns out it was my issue.

The problem is that you cannot use the '/' symbol for a file name, because that is known in the file system as the separator for directories. Thus, the filesystem might get stuck or might never find a file that has '/' in the name.

A comprehensive answer for this is this

David Buzatu
  • 624
  • 8
  • 18
1

The second argument in a call to snprintf should be max. buffer size, you didn't give that argument. Replacing

snprintf( fileSpec, "%04d_%02d_%02d_%02d:%02d.txt",year,month,day,hours,minutes);

with

snprintf( fileSpec, 255, "%04d_%02d_%02d_%02d:%02d.txt",year,month,day,hours,minutes);

(where 255 is the maximum length of the string snprintf will write) seems like it should solve your problem.