Filedate setzen
Moderator: Moderatoren
-
- Rekursionen-Architekt
- Beiträge: 116
- Registriert: Do, 29. Mai 2008 20:46
- Hat sich bedankt: 1 Mal
Filedate setzen
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
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
- brandelh
- Foren-Moderator
- Beiträge: 15695
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: Filedate setzen
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.
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
Hubert
-
- Rekursionen-Architekt
- Beiträge: 116
- Registriert: Do, 29. Mai 2008 20:46
- Hat sich bedankt: 1 Mal
Re: Filedate setzen
Änderungsdatum, sofern es keinen Ärger gibt, wenn es vor dem Erstellungsdatum liegt. Sonst beide.
- brandelh
- Foren-Moderator
- Beiträge: 15695
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: Filedate setzen
am besten beide gleich, sonst kann es sein, dass er im Explorer das falsche anzeigt:
https://xbaseforum.de/viewtopic.php?f=16&t=6050
Ich wusste, ich hatte da mal was gesehen
https://xbaseforum.de/viewtopic.php?f=16&t=6050
Ich wusste, ich hatte da mal was gesehen
Gruß
Hubert
Hubert
- AUGE_OHR
- Marvin
- Beiträge: 12906
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
Re: Filedate setzen
hast du die Dateien mit dem Explorer kopiert und nun haben die alle das selbe Datum
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
Jimmy
-
- Rekursionen-Architekt
- Beiträge: 116
- Registriert: Do, 29. Mai 2008 20:46
- Hat sich bedankt: 1 Mal
Re: Filedate setzen
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.
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.
- azzo
- Rekursionen-Architekt
- Beiträge: 483
- Registriert: So, 28. Mär 2010 19:21
- Danksagung erhalten: 11 Mal
Re: Filedate setzen
Hallo,
in Clipper gibt es setfdati(). Sollte auch in xBase vorhanden sein.
LG
Otto
in Clipper gibt es setfdati(). Sollte auch in xBase vorhanden sein.
LG
Otto
- Jan
- Marvin
- Beiträge: 14651
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Filedate setzen
Otto,
Xbase++ kennt ebenfalls ein SetFDaTi(), mit dem man Datum und Uhrzeit einer Datei setzen kann. Liegt in xbtbase1.dll.
Jan
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.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- brandelh
- Foren-Moderator
- Beiträge: 15695
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: Filedate setzen
SetFDaTi() man hört doch immer wieder was neues
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 ?
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
Hubert
- brandelh
- Foren-Moderator
- Beiträge: 15695
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: Filedate setzen
Es liefert und setzt, das Änderungsdatum ...
die PNG Datei, wird von DIR so angezeigt:
der Programmablauf ...
dennoch zeigt der Explorer von Win 7 64 Pro ...
Ich habe daher bei mir auch gleich die Spalte Änderungsdatum aktiviert.
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
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>
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
Ich habe daher bei mir auch gleich die Spalte Änderungsdatum aktiviert.
Gruß
Hubert
Hubert
- brandelh
- Foren-Moderator
- Beiträge: 15695
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: Filedate setzen
Der oben genannte LinK zur Wissensbasis zeigt auf die API Funktion
und kann alle 3 Datumswerte setzen.
Code: Alles auswählen
BOOL SetFileTime(
HANDLE hFile,
const FILETIME *lpCreationTime,
const FILETIME *lpLastAccessTime,
const FILETIME *lpLastWriteTime
);
Gruß
Hubert
Hubert
- brandelh
- Foren-Moderator
- Beiträge: 15695
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: Filedate setzen
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
Hubert