Das nächste Entwicklertreffen findet Anfang Mai in Münster statt - weitere Infos bzw. zur Anmeldung!

Filedate setzen

Konzeptionelles, Technisches, Termine, Fragen zum Hersteller usw.

Moderator: Moderatoren

Antworten
STEPHAN
UDF-Programmierer
UDF-Programmierer
Beiträge: 99
Registriert: Do, 29. Mai 2008 20:46

Filedate setzen

Beitrag von STEPHAN » Mo, 15. Apr 2019 13:09

Hi,

ich habe gerade keine Zugriff auf die Doku.

Ich muss bei ca. 500.000 Files das Filedatum nach bestimmten Formeln setzen.

Mit welchem XPP Befehl kann ich das aus einen XBase PGM heraus machen?

Danke

Stephan

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 14728
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: Filedate setzen

Beitrag von brandelh » Mo, 15. Apr 2019 13:17

da stellt sich zunächst die Frage, das Änderungsdatum, das Erstellungsdatum oder ... da war noch ein drittes.
Seit Win XX wird das unterschieden. In den Tools war glaube ich so eine Funktion, das Änderungsdatum könnte man auch mit Fopen und neu speichern erzwingen, aber wehe wenn was schief geht.
Ich weiß nicht mehr ob ich das mit Xbase++ oder einem tool gemacht habe, ist lange her.
Gruß
Hubert

STEPHAN
UDF-Programmierer
UDF-Programmierer
Beiträge: 99
Registriert: Do, 29. Mai 2008 20:46

Re: Filedate setzen

Beitrag von STEPHAN » Mo, 15. Apr 2019 13:22

Änderungsdatum, sofern es keinen Ärger gibt, wenn es vor dem Erstellungsdatum liegt. Sonst beide.

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 14728
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: Filedate setzen

Beitrag von brandelh » Mo, 15. Apr 2019 14:30

am besten beide gleich, sonst kann es sein, dass er im Explorer das falsche anzeigt:

:arrow: https://xbaseforum.de/viewtopic.php?f=16&t=6050

Ich wusste, ich hatte da mal was gesehen 8)
Gruß
Hubert

Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 11765
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

Re: Filedate setzen

Beitrag von AUGE_OHR » Di, 16. Apr 2019 1:59

STEPHAN hat geschrieben:
Mo, 15. Apr 2019 13:22
Änderungsdatum, sofern es keinen Ärger gibt, wenn es vor dem Erstellungsdatum liegt. Sonst beide.
hast du die Dateien mit dem Explorer kopiert und nun haben die alle das selbe Datum :roll:
Tip : für so was nehme ich den Total Commander mit "Kopiere Datum/Zeit von Verzeichnissen"

ich hatte ein DOS Tool das sich "Touch" nannte aber nicht unter 64Bit OS lief ... also hab ich mir das selbst geschrieben.
eine Sache über die ich immer wieder gestolpert bin : Daylightsaving = Sommerzeit

---

was ist eigentlich wenn die Sommerzeit abgeschafft wird mit solchen "Berechnungen" :?:
muss dann eine Abfrage rein Datum "ab 19xx" bis "20xx" dann Sommerzeit nachschauen ...
gruss by OHR
Jimmy

STEPHAN
UDF-Programmierer
UDF-Programmierer
Beiträge: 99
Registriert: Do, 29. Mai 2008 20:46

Re: Filedate setzen

Beitrag von STEPHAN » Di, 16. Apr 2019 9:41

Nein. Ich nutze sowieso Total Commander.

Es geht im E-Mail Dateien. Ich will das Fildedatum auf das Datum der E-Mail aus dem Inhalt setzen. Ich kann das Datum auslesen, aber das Ändern des Fildedatums klappt noch nicht.

Benutzeravatar
azzo
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 270
Registriert: So, 28. Mär 2010 19:21

Re: Filedate setzen

Beitrag von azzo » Di, 16. Apr 2019 21:39

Hallo,
in Clipper gibt es setfdati(). Sollte auch in xBase vorhanden sein.
LG
Otto

STEPHAN
UDF-Programmierer
UDF-Programmierer
Beiträge: 99
Registriert: Do, 29. Mai 2008 20:46

Re: Filedate setzen

Beitrag von STEPHAN » Di, 16. Apr 2019 23:06

Danke für alle Eure Hilfe. Läuft jetzt problemlos.

Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 13301
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Kontaktdaten:

Re: Filedate setzen

Beitrag von Jan » Mi, 17. Apr 2019 6:38

Otto,

Xbase++ kennt ebenfalls ein SetFDaTi(), mit dem man Datum und Uhrzeit einer Datei setzen kann. Liegt in xbtbase1.dll.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 14728
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: Filedate setzen

Beitrag von brandelh » Mi, 17. Apr 2019 6:51

SetFDaTi() man hört doch immer wieder was neues :D

Mal sehen welche der setzt, ich habe einige Dateien, die ich per Paint geändert habe, aber die weigern sich im Explorer die "neue" Zeit anzuzeigen und es kommt weiterhin die Erstellungszeit ... sehr seltsam das,
ob der Explorer bei Bilddateien auch Metadaten auswertet ?
Gruß
Hubert

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 14728
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: Filedate setzen

Beitrag von brandelh » Mi, 17. Apr 2019 7:06

Es liefert und setzt, das Änderungsdatum ...

Code: Alles auswählen

PROCEDURE Main
   LOCAL cFile := "F:\DSO\_HB-Skill-GM.png"
   LOCAL dDate := stod("20180813")
   LOCAL cTime := "17:16:00"
   /* we use the ansi charset by default */
   SET CHARSET TO ANSI
   ? "Setze Datum und Zeit"
   ?
   ? "Datei:     " , cFile
   ? "aktuell:   " , fileDate(cFile),fileTime(cFile)
   ?
   ? "SetFDaTi():" , SetFDaTi(cFile,dDate,cTime)
   ?
   ? "Datei:     " , cFile
   ? "aktuell:   " , fileDate(cFile),fileTime(cFile)
   ?
   inkey(40)
   /* $TODO: place your application code here */
RETURN
die PNG Datei, wird von DIR so angezeigt:

Code: Alles auswählen

F:\DSO>dir _hb-skill-gm.png
 Datenträger in Laufwerk F: ist Samsung_T3
 Volumeseriennummer: 703B-156D

 Verzeichnis von F:\DSO

13.08.2018  17:16           164.541 _HB-Skill-GM.png
               1 Datei(en),        164.541 Bytes
               0 Verzeichnis(se), 11.486.887.936 Bytes frei

F:\DSO>
der Programmablauf ...

Code: Alles auswählen

Setze Datum und Zeit

Datei:      F:\DSO\_HB-Skill-GM.png
aktuell:    13.08.2018 17:16:00

SetFDaTi(): J

Datei:      F:\DSO\_HB-Skill-GM.png
aktuell:    13.08.2018 17:16:00
dennoch zeigt der Explorer von Win 7 64 Pro ...
ExplorerDatumAnzeige.png
ExplorerDatumAnzeige.png (3.81 KiB) 106 mal betrachtet
Ich habe daher bei mir auch gleich die Spalte Änderungsdatum aktiviert.
Gruß
Hubert

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 14728
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: Filedate setzen

Beitrag von brandelh » Mi, 17. Apr 2019 7:09

Der oben genannte LinK zur Wissensbasis zeigt auf die API Funktion

Code: Alles auswählen

BOOL SetFileTime(
  HANDLE         hFile,
  const FILETIME *lpCreationTime,
  const FILETIME *lpLastAccessTime,
  const FILETIME *lpLastWriteTime
);
und kann alle 3 Datumswerte setzen.
Gruß
Hubert

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 14728
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: Filedate setzen

Beitrag von brandelh » Mi, 17. Apr 2019 7:48

Und wenn ich diese nutze, und so ausführe, dann wird das CREATE Datum auch so angezeigt wie ich das will ;-)

Code: Alles auswählen

#include "Common.ch"
#include "Fileio.ch"
#include "OT4XB.CH"
*#include "socket.ch"
#pragma library( "XBTBASE1.LIB" )
#pragma library( "XBTBASE2.LIB" )
#pragma library( "ADAC20B.lib" )




PROCEDURE Main

   LOCAL cFile := "F:\DSO\_HB-Skill-GM.png"
   LOCAL dDate := stod("20180813")
   LOCAL cTime := "17:16:00"

   // MSDN FILETIME Variablen (Pablo macht daraus Objekte - VIEL EINFACHER !)
*   LOCAL oFT    := FILETIME64():new():now()
   LOCAL oFCT
   LOCAL oFAT
   LOCAL oFWT
   LOCAL nH, cFN

   /* we use the ansi charset by default */
   SET CHARSET TO ANSI

   altd()

   ? "Setze Datum und Zeit"
   ?
   ? "Datei:     " , cFile
   ? "aktuell:   " , fileDate(cFile),fileTime(cFile)
   ?
   ? "SetFDaTi():" , SetFDaTi(cFile,dDate,cTime)
   ?
   ? "Datei:     " , cFile
   ? "aktuell:   " , fileDate(cFile),fileTime(cFile)
   ?
   ? "Nun mit Win API"
   ?

   altd()

   oFCT   := FILETIME64():new()
   oFAT   := FILETIME64():new()
   oFWT   := FILETIME64():new()


   cFN := cFile
   nH  := fOpen(cFN , FO_READWRITE + FO_SHARED )
   ? "Aktuelle Zeit als UTC=",   time("UTC")    ,"+00",time("+00"),"normal",time()  // habt ihr das schon gesehen ?
   ? "Lesen "
   ? "GetFileTime() = ",            @kernel32:GetFileTime(nH, @oFCT, @oFAT, @oFWT)    ,      @kernel32:GetLastError()
   // das war alles, nun kann man lesen.
   ? "Create:         ",oFCT:cTimeStamp
   ? "Access:         ",oFAT:cTimeStamp
   ? "Write:          ",oFWT:cTimeStamp
   // oder auch neu setzen ...
   // oFt:cTimeStamp := dtos(date())+"010203"
   ? "Setzen auf ... Änderungsdatum ..."
   ? "Create:         ",oFCT:cTimeStamp := oFWT:cTimeStamp
   ? "Access:         ",oFAT:cTimeStamp := oFWT:cTimeStamp
   ? "Write:          ",oFWT:cTimeStamp
   ? "SetFileTime() = ",@kernel32:SetFileTime(nH,oFCT, oFAT, oFWT)             ,@kernel32:GetLastError()
                        // was man nicht ändern will, einfach NIL setzen ...




   inkey(40)






   /* $TODO: place your application code here */
RETURN




Gruß
Hubert

Antworten