(WinAPI) Attribute Modified Date aus Datei



  • 😕
    1. Problem: Wie kann ich prüfen ob eine Datei exisitert ohne diese zu öffnen.

    Meine Vorstellung sieht ungefähr so aus:

    FILE *str_File
    BOOL File_exist

    File_Exist = ???gesuchte function???(str_File);

    if (str_File)
    {
    printf ("Datei exisitiert");
    }
    else
    {
    printf ("Datei exisitiert");
    }

    😕
    2. Problem: Wie erhalte ich Attribute wie created date oder modified date
    =========== einer bestimmten Datei

    Meine Vorstellung

    ???function???(str_File,createdDate,lastModifiedDate)

    Habe bereits mit CFindFile und GetFileTime probiert aber nichts damit anfangen können, dass auch was vernünftiges rauskommt.



  • FILE *fp;
    fp = "C:\test.txt";
    if ( fp )
       printf("Datei Existiert");
    else
       printf("Datei Existiert NICHT");
    

    Ich kann zwar selber nicht richtig mit dateien umgehen (bis jetzt ;))
    aber so sollte es doch klappen...



  • aber so sollte es doch klappen...

    Ne. So klappt das nicht.

    1. Problem: Wie kann ich prüfen ob eine Datei exisitert ohne diese zu öffnen.

    Gar nicht. Zumindest weder mit Standard-C++ noch mit Standard-C.

    Wie erhalte ich Attribute wie created date oder modified date

    Gar nicht. Zumindest weder mit Standard-C++ noch mit Standard-C.

    Beides sind Dateisystem-abhängige Operationen. Du bist also auf die Hilfe deines BS angewiesen. Welches BS verwendest du?



  • Also MUSS sie offen sein?

    FILE *fp = "c:\test.txt";
    if (fopen(fp))
    printf("Existiert");
    else
    printf("Existiert nicht");
    

    irgenwie so... Ich kanns halt gerade ausprobieren...
    hab probleme mit dev-c++... 😞



  • Original erstellt von HumeSikkins:
    **
    Beides sind Dateisystem-abhängige Operationen. Du bist also auf die Hilfe deines BS angewiesen. Welches BS verwendest du?**

    Ich tippe mal auf Windows (BOOL). Versuch mal das hier:

    BOOL PathFileExists(
        LPCTSTR lpszPath
        );
    

    Determines if a file exists.
    Returns TRUE if the file exists, or FALSE otherwise.

    Ist aber eben WinAPI.

    Edit: Da muss man noch Shlwapi.h inkludieren und Shlwapi.lib linken.

    [ Dieser Beitrag wurde am 09.04.2003 um 18:15 Uhr von Garrett editiert. ]



  • FILE *fp = "c:\test.txt";

    Das ist käse.

    FILE* fp = fopen("c:\\test.txt", "r");
    

    Das hingegen ist gültiges C.



  • Ich meinte, ich kanns NICHT ausprobieren 😃
    LOL



  • Hab jetzt keine probleme mehr mit devc++ 🙂

    Der code war also

    FILE *fp = fopen("c:\test.txt");
    if ( fp )
    printf("Existiert\n");
    else
    printf("Existiert nicht\n";
    


  • ich meine FILE *fp = fopen("c:\\test.txt", "r");



  • Original erstellt von <SculleatR>:
    *ich meine FILE fp = fopen("c:\\test.txt", "r");

    So und jetzt lesen wir nochmal die Frage:

    1. Problem: Wie kann ich prüfen ob eine Datei exisitert ohne diese zu öffnen.



  • 2. Problem: Wie erhalte ich Attribute wie created date oder modified date einer bestimmten Datei

    [code]#include <sys/stat.h>

    int main() {
    struct stat buf;
    FILE* file = fopen("foo", "r");
    // Ich lass if(!file) mal weg...
    fstat(fileno(file), &buf);
    long time_last_accessed = buf.st_atime;
    long time_last_modified = buf.st_mtime;
    long time_last_changed = buf.st_ctime;
    fclose(file);
    }[/code]



  • Hallo Leute

    Ich bin natürlich sehr erfreut über all diese Antworten, jedoch auch ein wenig verunsichert über die unterschiedlichen Aussagen. (Uebrigens meine BS sind Windows NT4, Windows2000 und auch XP)

    Aber ->

    Die Antwort von UncleSniper habe ich ausprobiert und funktioniert !!!! ( 🕶 APPLAUS 🕶 ) Ich hatte nämlich schon mehrere Tage damit verbracht etwas in diese Richtung zu finden, ohne Erfolg.

    Nun noch Fragen zu meinem Verständnis:

    1. Frage
    deutet der include von <sys/stat.h> nun darauf hin, dass eine API verwendet wird ?????

    2. Frage

    Ich habe nun die verschiedenen Zustände meiner Datei mit dem Programm von UncleSniper geprüft und die nachstehenden Werte bezüglich der Zugriffe erhalten.
    Die Unterschiede von access_time und modified_time sind mir klar. Aber was ist die Aussage von changed_time ???

    Original, Datei ist im Betriebssystem vorhanden
    nicht göffnet

    access = 1049957724
    modified = 1046870261
    changed = 1046870132
    Press any key to continue

    Datei geöffnet ohne Aenderung

    access = 1049957862
    modified = 1046870261
    changed = 1046870132
    Press any key to continue

    Datei geöffnet mit Aenderung

    access = 1049957862
    modified = 1046870261
    changed = 1046870132
    Press any key to continue

    Datei geöffnet und gespeichert

    access = 1049958078
    modified = 1049958078
    changed = 1046870132
    Press any key to continue

    Nun, nach der eleganten Lösung werde ich mich nun ranmachen den long Integer in ein Datum umzuwandeln. Das hoffe das wird nicht so ein Problem sein, oder??? Was erwartet mich den da noch??

    Freundliche Grüsse romu
    🕶

    Verwendeter Programmcode:

    #include "stdafx.h"
    #include "stdio.h"
    #include <sys/stat.h>

    int main(int argc, char* argv[])
    {
    FILE *pFile;
    struct stat buf;
    pFile = fopen ("D:\\Archiv\\G_26945_A.prt","r");

    if (pFile)
    {
    fstat(fileno(pFile),&buf);
    long time_last_accessed=buf.st_atime;
    long time_last_modified=buf.st_mtime;
    long time_last_changed=buf.st_ctime;
    printf ("access = %d \n",time_last_accessed);
    printf ("modified = %d \n",time_last_modified);
    printf ("changed = %d \n",time_last_changed);
    fclose(pFile);
    }
    return 0;
    }

    [ Dieser Beitrag wurde am 10.04.2003 um 09:36 Uhr von romu editiert. ]



  • Hallo,
    stat ist meines Wissens nach POSIX-Standard. Aus diesem Grund stehen die Chancen nicht schlecht, dass es unter vielen Betriebssystemen zur Verfügung steht. stat ist aber *nicht* Standard-C++.

    Ich verschiebe dich mal ins WinAPI-Forum.


Anmelden zum Antworten