Datei Änderungsdatum mit __TIMESTAMP__ ODER GetFileTime? Wie?



  • Danke für die Antwort.
    Drei kleine Fragen dazu habe ich noch.

    GetFileTime(hFile, &ftCreation, &ftLastAccess, &ftLastWrite)
    

    Für hFile gebe ich "C:\\test.txt" ein. Kann man da so machen?
    Wenn ich eine Datei angebe die nicht vorhande ist gibt es keine Fehlermeldung. Normal?

    cout << stTime.wHour << stTime.wMinute << stTime.wSecond;
    

    Wie heißen die Pointer für Tag, Monat und Jahr?
    stTime.wDay, stTime.wMonth und stTime.wYear?

    Wie kann ich das Datum + Uhrzeit in ein Labelfeld schreiben?

    Sorry das ich so dumm frage, bin noch Anfänger. 😕



  • Hi,
    die Fragen sind ok, aber etwas Eigeninitiative könntest Du zeigen.

    Wie heißen die Pointer für Tag, Monat und Jahr?

    Einfach SYSTEMTIME eingeben und F1 drücken und da steht alles, was Du wissen mußt. (Wenn die Hilfe nicht Dein bester Freund wird, wirst Du nicht weit kommen!)

    Wie kann ich das Datum + Uhrzeit in ein Labelfeld schreiben?

    Erzeuge einen String (guck mal in der Hilfe unter AnsiString::sprintf, das sollte Dir weiterhelfen), den kannst Du dann dem Label zuweisen:

    AnsiString myString = AnsiString().sprintf(/* Dein Zeitkrempel */);
    Label1->Caption = myString;
    

    Für hFile gebe ich "C:\\test.txt" ein. Kann man da so machen?

    Nein! hFile ist ein Handle, kein String. Aber mittels CreateFile (s. Hilfe!) kannst Du Dir ein Filehandle basteln. Ich glaube, der zweite Parameter muß dabei dann 0 sein.

    HANDLE hFile = CreateFile("C:\\test.txt", undsoweiterundsofort);
    

    So, jetzt erstmal in Ruhe die Hilfe konsultieren und alles verdauen. Wenn Du dann noch Fragen hast, helfe ich Dir gerne!
    Gruß,
    Christian



  • Vielen Dank!

    Ich werde mich Morgen wieder dran begeben.
    Mit der Borland Hilfe habe ich noch meine Problem.
    Leider alles auf Englisch, da verstehe manche Sachen nicht.

    Ich werde deinen Rat folgen.
    Und vielen Dank für dein Angebot, kommen evt. später daruf zurück.



  • So, ich habe mir mal die deutsche Hilfe zu Borland Builder runtergeladen.
    Damit komme ich besser klar.

    Ich habe mein Problem folgendermaßen gelöst:

    FILETIME ftCreation, ftLastAccess, ftLastWrite;
    HANDLE hFile = CreateFile("C:\\test.txt",GENERIC_READ | GENERIC_WRITE,0,0,OPEN_EXISTING,0,0);
    GetFileTime(hFile, &ftCreation, &ftLastAccess, &ftLastWrite);
    SYSTEMTIME stTime;
    FileTimeToSystemTime(&ftLastWrite, &stTime);
    Label2->Caption = DateTimeToStr(SystemTimeToDateTime(stTime));
    

    Kann man das evt. ins FAQ übertragen?
    Ich weiß nicht ob das von großen Wert ist.



  • Ich weiß nicht ... aber ich weiß, daß Du Deine Datei mit CloseHandle(hFile) wieder schließen solltest 😃



  • Danke für den Hinweis



  • Nachdem deine Eigeninitiative erwiesen ist können wir dir ja auch die komfortablen Varianten verraten. 😉
    Z.B.

    Caption = FileDateToDateTime(FileAge("c:\\boot.ini"));
    


  • Danke!

    Ich habe festgestellt das die längere Variante genauer funktioniert.
    Bei der kurzen Variante habe ich immer eine Ungenauigkeit von 1 bis 2 Sekunden im Vergleich zu den Windowsangaben.

    Caption = FileDateToDateTime(FileAge("c:\\boot.ini"));
    


  • kann mir bitte jemand verraten wie man die ermittelte zeit mit printf ausgeben kann? Ich bekomme immer folgenden Fehler:

    cannot convert `SYSTEMTIME' to `const char*' for argument `1' to `int printf(const char*, ...)'

    thx



  • wie wäre es mit ein wenig code zum fehler suchen, ansonsten empfehl ich dir einfach mal die formatflags für printf anzuschauen .... ich vermute mal du hast printf(MYTIMEVAL); versucht, aber das wäre thema verfehlt



  • im prinzip hab ichs mit dem stück quelltext meines vorredners versucht:

    FILETIME ftCreation, ftLastAccess, ftLastWrite;
    HANDLE hFile = CreateFile("C:\\test.txt",GENERIC_READ | GENERIC_WRITE,0,0,OPEN_EXISTING,0,0);
    GetFileTime(hFile, &ftCreation, &ftLastAccess, &ftLastWrite);
    SYSTEMTIME stTime;
    FileTimeToSystemTime(&ftLastWrite, &stTime);
    
    printf(stTime.wHour);
    scanf(0);
    


  • du verstehst printf() garnicht

    printf heißt printformatted du gibst zuerst den formatstring an und dann die parameter

    bitte such dir ne FAQ dazu bevor du jetzt folgendes einfach abtippst

    printf("%02d", stTime.wHour);

    zur info % deutet einen parameter an 02 heißt 2 stellen mit vorangestellten nullen 00, 01, 02 usw. d heißt dezimalzahl.

    ein ausgefallener formatstring bringt oft wunderschöne ergebnisse

    printf("meine Datei ist %2d Stunden %2d Minuten %2d.%03d Sekunden alt", stTime.wHour, stTime.wMinute, stTime.wSecond, stTime.wMillisecond);

    ergebnis mit pseudowerten

    "meine Datei ist 22 Stunden 3 Minuten 34.012 Sekunden alt"



  • ah shit da war ja was. wie peinlich.
    vielen dank das du dir trozdem die mühe gemacht hast



  • Jetzt gibt er zwar was aus, aber immer das selbe. D.h. die Zeit ändert sich nicht obwohl die Uhr weiter läuft.

    #include <stdio.h>
    #include <windows.h>
    
    int main()
    {
    
        FILETIME ftCreation, ftLastAccess, ftLastWrite;
        HANDLE hFile = CreateFile("C:\\test.txt",GENERIC_READ | GENERIC_WRITE,0,0,OPEN_EXISTING,0,0);
        GetFileTime(hFile, &ftCreation, &ftLastAccess, &ftLastWrite);
        SYSTEMTIME stTime;
        FileTimeToSystemTime(&ftLastAccess, &stTime);
        CloseHandle(hFile);
        printf("meine Datei ist %2d Stunden %2d Minuten %2d Sekunden alt", stTime.wHour, stTime.wMinute, stTime.wSecond); 
        scanf(0);
        return true;
    }
    


  • was genau gibt er denn aus ? ich kann (bis auf die tatsache das du anscheinend ständig ne neue datei erzeugst) keinen fehler drin finden ...

    versuch doch mal statt lastaccess mal lastwrite und lastcreation auszulesen und wo du schon dabei bist lass dir von lastaccess gleich noch year month und day ausgeben, mich beschleicht da schon ein verdacht



  • 1601 Jahre 1 Monat 1 Tag 0 Stunden 3 Minuten 20 Sekunden

    Bei lastAccess. Egal ob ich die Systemzeit ändere oder die Datei bearbeite.

    Die andern Sachen (Creation, LastWrite) geben zwar untersch. Werte aber auch immer konstante aus.



  • Return Values
    If the function succeeds, the return value is nonzero.

    If the function fails, the return value is zero. To get extended error information, call GetLastError.

    wenn GetFileTime also 0 als ergebnis liefert, gib mal GetLastError()-Code aus ansonsten seh ich grad nicht wo das problem liegt oder ich bin einfach blind

    PS gibt denn wenigstens lastcreation einen sinnvollen wert zurück oder liegt der auch irgendwo um das jahr 1600 ???



  • Creation gibt:

    1632 Jahre 3 Monate 20 Tage 21 Stunden 43 Minuten 42 Sekunden
    aus.

    Bei GetLastError(); gibt er mir garnix aus. Aber es wird auch nich solange gewartet bis ich ne Taste drück (wie von scanf gefordert) sondern nach ein paar Sekunden geht die Konsole einfach zu.



  • versuchs mit System("PAUSE"); ich hoff doch mal das es das war .... ansonstn bin ich erstmal ratlos, ich kanns hier im moment einfach nicht ausprobiern



  • Jo trozdem erstmal danke für deine hilfe.


Anmelden zum Antworten