Datum und Uhrzeit als Textdateiname? Wie das?

Gast #685288
Lesenswert?

Hallo!

Ich wollte mal fragen, ob mir einer beim folgenden Problem helfen kann:

Ich erstelle eine Datei mit meinem Programm, wenn ich auf einen Button 
klicke.
Nun wollte ich quasi mal das Fetaure machen, dass der name der Datei die 
aktuelle Datum und Uhrzeit ist.

Hat jemand einen Tipp wie ih es machen könnte?

Ich danke schon mal,

Runkelfurunkel
Gast #685604
Lesenswert?

eine Funktion in deiner Programmiersprache suchen die aktuelle 
Datum/Zeit liefert. Dann den String mit Format Anweisung passend 
gestalten. Und wenn das Programm auf Rechnern mit Betriebssystemen in 
verschiedenen Sprachen läuft daran denken das dann die 
Standardformattierungen ungültige Zeichen in den Namen bringen können, 
also besser den Namen selber zusammenbauen.
Und Datumsangaben möglichst so zusammensetzen: JJJJMMTT, dann werden die 
Dateien auch bei alphabetischer Sortierung in der richtigen Reihenfolge 
angezeigt.
Gast #685921
Lesenswert?

Also.
Ich arbeite mit VC++, und habe in meinem Programm folgendes stehen:

   CTime time = CTime::GetCurrentTime();
   CString str = time.Format("%d.%m.%Y_%H:%M:%S");

Das habe ich aus dem Internet. Muss ich jetzt noch eine header 
einbinden, oder etwas anderes?
Das thema mit dem erstellen der Datei klappt mitlerweile auch:

   FILE* fp;
   fp = fopen("test.txt","w");

   fprintf(fp, Ausgabefenster->Text);  // Hier will ich den Inhalt einer 
Richtextbox in die Datei schreiben lassen, klappt aber so noch nicht.
   fclose(fp);

Jetzt will ich, dass das Programm die Datei nach dem aktuellen Datum 
nennt, also glaube ich zu wissen, dass man dann an dieser Zeile hier:

   fp = fopen("test.txt","w");

etwas verändern muss.

Danke,

Runkelfurunkel
Gast #685958
Lesenswert?

Hi

Ich programmiere mit Delphi, nicht mit VB. Unter Delphi hat RichEdit 
eine Eigenschaft: Lines, die den Text beinhaltet. Diese wiederum besitzt 
eine Methode: SaveToFile. Damit lässt sich der Text von RichEdit mit 
einer Zeile speichern:

   RichEdit.Lines.SaveToFile(FileName);

Vielleicht geht das in VB ähnlich?

MfG Spess
Gast #685969
Lesenswert?

Ich hatte das mit dem speichern der Datei schon hinbekommen, wie ich 
oben schon geschrieben hatte.

Ich wollte jetzt eigentlich nur wissen, wie ich eine zuvor erstellte 
textdatei  nach dem aktuellen Datum benenne.

Runkelfurunkel
Gast #685974
Lesenswert?

Oh, sorry! Ich habe außversehen das hier oben geschrieben, obwohl ich 
den text ganz woanders hinschreiben wollte. :-/

Aber zu deinem Vorschlag, ich glaube, dass es in VC++ ganz anders 
aussieht.

Aber trotzdem danke

Runkelfurunkel
#686293
Lesenswert?

Runkelfurunkel wrote:

> nennt, also glaube ich zu wissen, dass man dann an dieser Zeile hier:
>
>    fp = fopen("test.txt","w");
>
> etwas verändern muss.

Hmm. Was könnte man wohl an dieser Zeile verändern, so dass
die Datei nicht mehr "test.txt" heist, sondern den Dateinamen
aus einer Variablen namens str holt?

Das ist wirklich eine 11-er Frage.
#687031
Lesenswert?

1
#include <time.h>
2
#include <stdio.h>
3
#include <errno.h>
4

5
int main(int argc, char *argv[])
6
{
7
    char        buffer[1024];
8
    struct tm   my_tm;
9
    FILE        *fp;
10
    time_t      now;
11

12
    time(&now);
13
    localtime_r(&now, &my_tm);
14
    strftime(buffer, 1024, "%Y-%m-%d %H:%M", &my_tm);
15

16
    fp = fopen(buffer, "w");
17
    if (!fp) {
18
        perror("Failed to open");
19
        return 1;
20
    }
21

22
    fprintf(fp, "test");
23
    fclose(fp);
24

25
    return 0;
26
}
Gast #687068
Lesenswert?

Hallo Bernhard Walle,

Danke für die Antwort, aber leider fuktioniert das nicht. Wenn er die 
Datei erstellen soll, dann kommt eine Fehlermeldung von der Debug 
library:

Debug Assertion failed!

Program: ...
File: strftime.c
Line: 629

Expression: ((timeptr->tm_mday >=1)&&(timeptr->tm_mday <=31))


Ich habe jetzt nicht im entferntesten einen Plan was das bedeutet. 
kannst du mir bitte noch einmal helfen?

Danke, gruß

Runkelfurunkel
Gast #687343
Lesenswert?

He, uhu!

Du kanns ja prima sprüche reißen, aber wenn es um konkrete Anworten oder 
Lösungen geht, ziehst du dich zurück oder redest um den heißen Brei 
herum.

Wieso sagst du mir denn nicht einfach was in my_tm steht? Nichts, oder?

Außerdem, wenn du es noch nicht bemerkt haben solltest, dies hier ist 
ein FORUM. Wenn du schon in einem Forum Antworten schreibst, dann bitte 
auch welche mit denen man etwas anfangen kann.

Vielleicht bist du ein typ, der alles kann, ich bin es nicht. Wenn du 
findest, dass meine Antwort dumm war, und nichts anderes weißt als dumme 
Sprüche zu reißen, dann Antworte besser gar nicht.

Runkelfurunkel
#687481
Lesenswert?

> Expression: ((timeptr->tm_mday >=1)&&(timeptr->tm_mday <=31))
>
>
> Ich habe jetzt nicht im entferntesten einen Plan was das bedeutet.
> kannst du mir bitte noch einmal helfen?

Hmm.
Die tm Struktur hat etwas mit einem Datum bzw. Zeit
zu tun.

Ein assert testet eine Aussage auf Gültigkeit.

Die Aussage lautet, laut Debug Ausgabe:

timeptr->tm_mday >=1)&&(timeptr->tm_mday <=31

Was könnte das wohl sein?
Die beteiligte Variable ist mit tm_mday benannt. Da steckt das
englische 'day', also Tag drinnen. Und dieses ominöse day
Variable muss grösser/gleich 1 und kleiner/gleich 31 sein.

Was könnte wohl hier geprüft werden?
Und was wird man wohl in der tm Struktur, die ja von localtime
gefüllt werden sollte, mal abprüfen.

Ist wirklich schwierig :-)
#687485
Lesenswert?

Runkelfurunkel wrote:
>>> nennt, also glaube ich zu wissen, dass man dann an dieser Zeile hier:
>>>
>>>    fp = fopen("test.txt","w");
>>>
>>> etwas verändern muss.

>> Hmm. Was könnte man wohl an dieser Zeile verändern, so dass
>> die Datei nicht mehr "test.txt" heist, sondern den Dateinamen
>> aus einer Variablen namens str holt?

>> Das ist wirklich eine 11-er Frage.

> Ja, eine 11-er Frage, auf die ich gerne eine Antwort hätte.

Wenn du das nicht selber heraus kriegst, dann ist es besser
du lässt das Programmieren sein. Das ist nichts für dich.
Ist keine Schande, nicht jeder hat das Zeugs dazu. Dafür
kannst du halt andere Dinge besser.

   CTime time = CTime::GetCurrentTime();
   CString str = time.Format("%d.%m.%Y_%H:%M:%S");

   FILE* fp;
   fp = fopen( str, "w" );

Ist doch eigentlich naheliegend, oder nicht?
In str steht ein Text und diesr Text soll als Dateiname
dienen. Das erste Argument, das fopen erwartet ist der
Dateiname. Ergo ....


Falls du doch noch weiter programmieren lernen willst, empfehle
ich dir dringenst den Ankauf eines Buches. Vergiss das Internet.
Alle Seiten zusammen, alle Online-Tutorien können ein Buch
nicht ersetzen. Ohne eine systematische Einführung, die ausführlich
Schritt für Schritt vom Einfachen zum Schwierigen vorgeht wird
das nichts.
#690872
Lesenswert?

Runkelfurunkel wrote:
> Hallo Bernhard Walle,
>
> Danke für die Antwort, aber leider fuktioniert das nicht. Wenn er die
> Datei erstellen soll, dann kommt eine Fehlermeldung von der Debug
> library:
>
> Debug Assertion failed!
>
> Program: ...
> File: strftime.c
> Line: 629
>
> Expression: ((timeptr->tm_mday >=1)&&(timeptr->tm_mday <=31))

Vielleicht ist das localtime_r() kaputt. Probier mal localtime(). Ist 
halt nicht threadsicher.
1
time(&now);
2
strftime(buffer, 1024, "%Y-%m-%d %H:%M", localtime_r(&now));

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren