Datei Attribute !



  • http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/base/setfileattributes.asp
    mach es doch so, dafür brauchst du keinen handle nur den dateinamen



  • unzi schrieb:

    Die Zeit, als die Datei das letzte mal gelesen wurde, würde ich sowieso nicht ändern. Das ist Sache von Windows. Außerdem musst du die Datei natürlich vorher öffnen, etwa so:

    HANDLE hFile;
    hFile=CreateFile(fileData.cFileName,GENERIC_WRITE,0,NULL,OPEN_EXISTING,NULL,NULL);
    

    Du kannst nicht den Searchhandle als Dateihandle angeben.

    Hintergrund ich will die letzte der Dateien löschen, will aber dabei beachten ob eine Datei vielleicht vorher nochmal geöffnet worden ist! Und bei dieser Datei die Zeit verändern!



  • Wholesaler schrieb:

    Hintergrund ich will die letzte der Dateien löschen, will aber dabei beachten ob eine Datei vielleicht vorher nochmal geöffnet worden ist! Und bei dieser Datei die Zeit verändern!

    die letzte von was 😕 verzeichnissbaum? datum? ...



  • miller_m schrieb:

    Wholesaler schrieb:

    Hintergrund ich will die letzte der Dateien löschen, will aber dabei beachten ob eine Datei vielleicht vorher nochmal geöffnet worden ist! Und bei dieser Datei die Zeit verändern!

    die letzte von was 😕 verzeichnissbaum? datum? ...

    Also sagen wir mal ich habe 5 Dateien

    Datei_1 05.04.2004 10 Uhr 11
    Datei_2 05.04.2004 10 Uhr 12
    Datei_3 05.04.2004 10 Uhr 13
    Datei_4 05.04.2004 10 Uhr 14
    Datei_5 05.04.2004 10 Uhr 15

    Jetzt soll die älteste gelöscht werden! Ist Datei_1 !
    Jetzt wird datei_1 zwischenzeitlich geladen, angepackt ....

    Ich will die Zeit der Datei ändern!
    Jetzt Datei_1 05.04.2004 11 Uhr 50 Es soll jetzt wieder die älteste gelöscht werden! Das wäre in dem fall nun Datei_2 05.04.2004 10 Uhr 12!

    Gibt es dafür ein Bsp?

    Gruss



  • Wholesaler schrieb:

    Jetzt wird datei_1 zwischenzeitlich geladen, angepackt ....

    ich glaube dieser fall ist sehr sehr unwahrscheinlch. das dieser fall in einer riesigen schleife (oder rekursion) ausarten würde.

    ich würde es so machen:
    - alle dateien in eine liste laden (std::list, array oder irgendwiesowas)
    - sortieren nach datum
    - letzter eintrag ist das file das gelöscht werden soll



  • Hi ja genau das tue ich ja!

    Ich lade alle Dateien in ein array und habe mir ein Sortiertemplat gebastelt!

    Das Problem ist nur wie änder ich die Zeit!

    DCString strSuch = m_strZielPfad+ "\" + strFilename + "." + m_strPCDateiErweiterung;

    hSearch = ::FindFirstFile(strSuch , &fileData );

    if (hSearch != INVALID_HANDLE_VALUE)
    {
    GetSystemTime(&st); // Aktuelle Zeit holen
    SystemTimeToFileTime(&st, &ft);
    // Konvertieren von Systemzeit nach Filezeit

    bOK = SetFileTime(hSearch,&ft,&ft ,&ft);

    bOK = GetFileTime(hSearch, &ftCreate, &ftAccess, &ftWrite);

    FileTimeToSystemTime(&ftCreate, &stlocalcr);
    FileTimeToSystemTime(&ftAccess, &stlocalac);
    FileTimeToSystemTime(&ftWrite, &stlocalwr);
    }

    ::FindClose(hSearch);

    so geht es jedenfalls nicht!

    /////////////////////////////////////////////
    Hast du viellicht ein komplettes Beispiel!
    Wie ich das Handle richtig aufbaue?

    Das Handle um FILETIME ftCreate, ftAccess, ftWrite;
    (Create;Access und write Time zu ändern!!!)
    /////////////////////////////////////



  • wie unzi schon gesagt hat, du brauchst einen filehandle. mit dem searchhandle geht das nicht.

    if (hSearch != INVALID_HANDLE_VALUE) 
    { 
    GetSystemTime(&st); // Aktuelle Zeit holen 
    SystemTimeToFileTime(&st, &ft); 
    // Konvertieren von Systemzeit nach Filezeit 
    
    // datei öffnen wie unzi vorgeschlagen hat
    // hFile = CreateFile(...
    bOK = SetFileTime(hFile,&ft,&ft ,&ft); 
    
    CloseHandle(hFile);
    
    // und weiter gehts
    


  • Also zuerst suchen dann neues Öffnen Handle Time ändern und schliessen!

    Ich versuch das einfach mal!

    Danke!



  • Aus deien Beschreibungen geht irgendwie nicht hervor, warum du die Zugriffszeit jetzt überhaupt ändern willst 🙄
    BTW: Die "File-Zeiten" sind eigentlich keine Attribute 🤡



  • flenders schrieb:

    Aus deien Beschreibungen geht irgendwie nicht hervor, warum du die Zugriffszeit jetzt überhaupt ändern willst

    er wird schon seine gründe haben 😃



  • so habe es mal so versucht!
    Ging in die Hose!

    if (hSearch != INVALID_HANDLE_VALUE)
    {
    GetSystemTime(&st); // Aktuelle Zeit holen
    SystemTimeToFileTime(&st, &ft); Filezeit

    HANDLE hFile;
    DCString strFilekpl = m_strZielPfad + fileData.cFileName;
    hFile=CreateFile(strFilekpl,GENERIC_WRITE,0,NULL,OPEN_EXISTING,NULL,NULL);

    bOK = SetFileTime(hFile,&ft,&ft ,&ft);
    bOK = GetFileTime(hFile, &ftCreate, &ftAccess, &ftWrite);

    FileTimeToSystemTime(&ftCreate, &stlocalcr);
    FileTimeToSystemTime(&ftAccess, &stlocalac);
    FileTimeToSystemTime(&ftWrite, &stlocalwr);

    CloseHandle(hFile);
    }

    ::FindClose(hSearch);

    return bOK;

    bOK ist jedesmal FALSE! (SetFileTime(hFile,&ft,&ft ,&ft);)

    Kannst du helfen?



  • 1.) Was ist ein DCString?
    2.) Was steht in strFilekpl - ist der Pfad richtig?
    3.) Was liefert CreateFile zurück und was sagt ggf. GetLastError?



  • flenders schrieb:

    1.) Was ist ein DCString?
    2.) Was steht in strFilekpl - ist der Pfad richtig?
    3.) Was liefert CreateFile zurück und was sagt ggf. GetLastError?

    zu 1 CSTring
    zu 2 strFilekpl = Zielpfad(\Program Files\Test\) + Dateiname + jpg
    zu 3 CreateFile liefert Handle hfile zurück! GetLastError muss ich debuggen!

    Woran könnte es liegen? Oder hast du eine Idee wie ich das besser machen kann?

    Gruss



  • Wholesaler schrieb:

    flenders schrieb:

    1.) Was ist ein DCString?
    2.) Was steht in strFilekpl - ist der Pfad richtig?
    3.) Was liefert CreateFile zurück und was sagt ggf. GetLastError?

    zu 1 CSTring
    zu 2 strFilekpl = Zielpfad(\Program Files\Test\) + Dateiname + jpg
    zu 3 CreateFile liefert Handle hfile zurück! GetLastError muss ich debuggen!

    Woran könnte es liegen? Oder hast du eine Idee wie ich das besser machen kann?

    Gruss

    GetLastError liefert mir 2 zurück!!!



  • Wholesaler schrieb:

    flenders schrieb:

    1.) Was ist ein DCString?
    2.) Was steht in strFilekpl - ist der Pfad richtig?
    3.) Was liefert CreateFile zurück und was sagt ggf. GetLastError?

    zu 1 CSTring
    zu 2 strFilekpl = Zielpfad(\Program Files\Test\) + Dateiname + jpg
    zu 3 CreateFile liefert Handle hfile zurück! GetLastError muss ich debuggen!

    Woran könnte es liegen? Oder hast du eine Idee wie ich das besser machen kann?

    Gruss

    Es scheint an createFile zu liegen! Stimmt etwas mit den Parametern nicht?



  • Was _genau_ steht denn jetzt in strFilekpl drin - hast du dir das mal direkt ausgeben lassen?
    Bzw. hast du mal ausprobiert, ob es klappt, wenn du den Pfad entsprechen direkt angibst?!



  • So habe den Fehler gefunden!

    Beim zusammen bau des Pfades habe ich \\ ein backslash vergessen! ;-)))


Anmelden zum Antworten