Filedate setzen

Konzeptionelles, Technisches, Termine, Fragen zum Hersteller usw.

Moderator: Moderatoren

Antworten
STEPHAN
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 116
Registriert: Do, 29. Mai 2008 20:46
Hat sich bedankt: 1 Mal

Filedate setzen

Beitrag von STEPHAN »

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: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Filedate setzen

Beitrag von brandelh »

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
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 116
Registriert: Do, 29. Mai 2008 20:46
Hat sich bedankt: 1 Mal

Re: Filedate setzen

Beitrag von STEPHAN »

Änderungsdatum, sofern es keinen Ärger gibt, wenn es vor dem Erstellungsdatum liegt. Sonst beide.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Filedate setzen

Beitrag von brandelh »

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: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Filedate setzen

Beitrag von AUGE_OHR »

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
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 116
Registriert: Do, 29. Mai 2008 20:46
Hat sich bedankt: 1 Mal

Re: Filedate setzen

Beitrag von STEPHAN »

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: 483
Registriert: So, 28. Mär 2010 19:21
Danksagung erhalten: 11 Mal

Re: Filedate setzen

Beitrag von azzo »

Hallo,
in Clipper gibt es setfdati(). Sollte auch in xBase vorhanden sein.
LG
Otto
STEPHAN
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 116
Registriert: Do, 29. Mai 2008 20:46
Hat sich bedankt: 1 Mal

Re: Filedate setzen

Beitrag von STEPHAN »

Danke für alle Eure Hilfe. Läuft jetzt problemlos.
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Filedate setzen

Beitrag von Jan »

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: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Filedate setzen

Beitrag von brandelh »

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: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Filedate setzen

Beitrag von brandelh »

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) 7593 mal betrachtet
Ich habe daher bei mir auch gleich die Spalte Änderungsdatum aktiviert.
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Filedate setzen

Beitrag von brandelh »

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: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Filedate setzen

Beitrag von brandelh »

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