Datum als Dateiname???



  • Das ist mein Code:

    #include<stdio.h>
    #include<stdlib.h>
    #include"time.h"

    #include"Seriell_Com.h"
    int main()
    {
    int r_code = 0;
    unsigned int i = 0;
    char *ComPort = "com1";
    FILE *fp =NULL;

    time_t rawtime;
    struct tm * timeinfo;
    char buffer [80];

    time ( &rawtime );
    timeinfo = localtime (&rawtime);

    strftime (buffer,80,"%x_%X",timeinfo);
    puts (buffer);

    h_com = NULL;
    fp = fopen("?????.txt","w");

    Wie bekomme ich das Datum als Dateiname hin??
    Vllt auch nur die Zeit und das eigentliche Datum wie z.B.: 13:00_29.01.07_.txt

    Gruß Jonas

    😕



  • Du hast doch schon die aktuelle Zeit in 'buffer' stehen - da mußt du nur noch das .txt dranhängen und schon hast du deinen Dateinamen:

    strftime (buffer,80,"%x_%X",timeinfo); 
    puts (buffer); 
    strcat(buffer,".txt");
    fp = fopen(buffer,"w");
    

    Wenn du ein anderes Format haben willst, mußt du den Formatstring für die strftime() anpassen.

    PS: Übrigens solltest du auch Platz für den abschließenden Null-Terminator im String lassen 😉

    PPS: sfds



  • Moin

    Habe die Zeile eingefügt!!
    Aber er legt keine Datei an???

    Gruß Jonas



  • Hast du auch den anschließenden fopen()-Aufruf angepasst?

    (am besten zeigst du mal den kompletten Code, wie er jetzt aussieht, dann können wir weiter nach möglichen Fehlerquellen suchen)



  • #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<time.h>

    #include"Seriell_Com.h"
    int main()
    {
    int r_code = 0;
    unsigned int i = 0;
    char *ComPort = "com1";
    FILE *fp =NULL;
    time_t rawtime;
    struct tm * timeinfo;
    char buffer [80];

    time ( &rawtime );
    timeinfo = localtime (&rawtime);

    strftime (buffer,80,"%x_%X",timeinfo);
    puts (buffer);
    strcat(buffer,".txt");
    fp = fopen(buffer,"w");



  • vielleicht solltest du aus deinem fopen ein

    fopen( buffer, "w+" );
    

    und eventuell noch den rückgabewert von fopen abfangen, falls dann doch etwas schief lief



  • *nochmal genauer hinsieht* Ein Dateiname unter Windows darf keinen Doppelpunkt enthalten, damit könntest du Probleme bekommen. Die Lösung wäre es, den Formatstring so anzupassen, daß er keine Doppelpunkte mehr enthält:

    char buffer[81];//zusätzlicher Platz für Null-Terminator
    strftime(buffer,80,"%H-%M %x.txt",&rawtime);//- als Trennzeichen zwischen Stunde und Minute 
    fp=fopen(buffer,"w");
    


  • 😞

    es hat sich nix geändert!! in der Ausgabe auf den Bildschirm paßt das alles!
    Aber der generiert keine Datei. auch nicht mit "w+"

    😕



  • Soviel ich sehe, wir die Datei zwar geöffnet, aber nichts in die Datei geschrieben. Deshalb bin ich mir jetzt nicht sicher, ob die Datei überhaupt erstellt wird, wenn man gar nichts reinschreibt? Vielleicht liegt es ja daran?

    mfg
    Bernasconi



  • Bernasconi schrieb:

    Soviel ich sehe, wir die Datei zwar geöffnet, aber nichts in die Datei geschrieben. Deshalb bin ich mir jetzt nicht sicher, ob die Datei überhaupt erstellt wird, wenn man gar nichts reinschreibt? Vielleicht liegt es ja daran?

    mfg
    Bernasconi

    wenn du sie öffnest mit dem modus w+ wird eine erstellt ob du was reinscreibst oder nicht



  • Hast du auch das oben angesprochene Problem (Doppelpunkt im Dateinamen) bedacht? Möglicherweise (höchstwahrscheinlich) scheitert der fopen()-Aufruf ja daran, daß dein BS den übergebenen Namen nicht interpretieren kann (oder an mangelnden Zugriffsrechten).



  • Moin Leute

    danke für die Hilfe ich habe es hinbekommen.
    Schuld war das "w" ich habe a eingesetzt und es funzt!!
    Außerdem war auch der : Schuld daran das keine richtige Datei angelegt wurde.

    Also trafen mehrere Probleme zusammen.

    Aber danke Trozdem habt mir sehr geholfen.

    der endgültige Code:

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<time.h>

    #include"Seriell_Com.h"
    int main()
    {
    int r_code = 0;
    unsigned int i = 0;
    char *ComPort = "com4";
    FILE *fp =NULL;

    time_t rawtime;
    struct tm * timeinfo;
    char buffer [41];
    h_com = NULL;

    time ( &rawtime );
    timeinfo = localtime (&rawtime);

    strftime (buffer,40,"%d %b %y %Hh %Mmin %Ssec",timeinfo);
    puts (buffer);
    strcat(buffer,".txt");
    fp=fopen(buffer, "a+");
    fprintf(fp,"%s\n",buffer);
    fprintf(fp,"\n");

    r_code = get_handle_com(&ComPort);

    r_code = set_conf_com(9600);

    r_code = set_mask_com();

    clear_error();
    empty_comStat_cbInQue();

    while(1)
    {
    printf("n: %d\n",comStat.cbInQue);
    if(get_data_com() == 0)
    {
    for(i=0;i<comStat.cbInQue;i++)
    {
    printf("%d ",p_chRead[i]);
    fprintf(fp,"%s\n",p_chRead);
    }
    printf("\n");
    }
    }

    r_code = close_handle_com();

    free(ComPort);
    }


Anmelden zum Antworten