Datei Änderungsdatum mit __TIMESTAMP__ ODER GetFileTime? Wie?



  • 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