![]() |
Delphi-Version: 2007
Datei-Änderungsdatum auslesen- NUR das Jahr neu setzen und in Datei zurückschreiben
Hallo zusammen,
mit den Datumsfunktionen stehe ich wirklich auf dem Kriegsfuss. :oops: Ich habe einiges gesucht und ausprobiert, bekomme aber leider nicht das gewünschet Ergebnis. Ich lese das Änderungsdatum einer Datei aus. Z. B. mit GeFileTime(). Somit habe das Dateidatum in einem TDateTime-Format. Egal welches Jahr dort drin steht, ich möchte ein neues Jahr setzen (nur das Jahr). Zu beachten wäre evtl., dass das Jahr auch durchaus vor 1980 sein kann. 1. Wie bekomme ich das mit dem Jahr hin? 2. Wie schreibe ich es dann in die Datei zurück? (wird wohl im Wesentlíchen von der Umsetzung aus Punkt 1 abhängen, evtl. mit SetFileTime()?) Freue mich über jede Hilfestellung. Danke schon mal vorab! |
AW: Datei-Änderungsdatum auslesen- NUR das Jahr neu setzen und in Datei zurückschreib
Zum de- und enkodieren des Datums kannst du EncodeDateTime() und DecodeDateTime() verwenden. Das liefert dir Tag, Monat, Jahr, Stunde, etc. einzeln zurück.
|
AW: Datei-Änderungsdatum auslesen- NUR das Jahr neu setzen und in Datei zurückschreib
Es gibt auch eine Fuktion IncYear() in den DateUtils, die sollte genau das erledigen. SetFileTime() sollte ebenfalls richtig sein - Hilfe siehe msdn.
![]() ![]() |
AW: Datei-Änderungsdatum auslesen- NUR das Jahr neu setzen und in Datei zurückschreib
Hallo zusammen,
kam leider erst heute zum weiteren Bearbeiten, schließlich sind wir auch noch neuer dt. Meister geworden! :-D Danke zuerst für die Antworten! IncYear() von jfheins war dann genau das richtige für meinen Anwendungsfall. :thumb: Für alle nachfolgenden Interessenten zu diesem Thema, meine Umsetzung: (Fehlerbehandlung für den MP3-Tag "Jahr" habe ich hier nicht mit aufgeführt)
Delphi-Quellcode:
Verbesserungsvorschläge sind natürlich gern gesehen.
var
... hFile: THandle; ls_Jahr_vom_DateiDatum, ls_MP3_Tag_Year : string; li_Korrektur_Jahr : Integer; lt_new_Time_Dummy : SystemTime; lt_new_Time : TFileTime; ... ... begin hFile := FileOpen(FCurFile, fmOpenWrite or fmShareDenyNone); li_Korrektur_Jahr := 0; try if not (hFile = INVALID_HANDLE_VALUE) then begin ls_Jahr_vom_DateiDatum := FormatDateTime('YYYY', GetFileDate(FCurFile)); ls_MP3_Tag_Year := JS_MP3Tag.Year; li_Korrektur_Jahr := StrToInt(ls_MP3_Tag_Year) - StrToInt(ls_Jahr_vom_DateiDatum); if li_Korrektur_Jahr <> 0 then begin try DateTimeToSystemTime(IncYear(GetFileDate(FCurFile), li_Korrektur_Jahr), lt_new_Time_Dummy); SystemTimeToFileTime(lt_new_Time_Dummy, lt_new_Time); SetFileTime(hfile, nil, nil, @lt_new_Time); except on E: Exception do begin Main_Form.MemoLog.Lines.Add(E.ClassName + ':' + E.Message + ' ' + SysErrorMessage(GetLastError) + ' Datei, welche nicht geändert werden konnte => "' + FCurFile + '"'); Main_Form.img3.Visible := True; end; end; end else if hFile = INVALID_HANDLE_VALUE then begin Main_Form.MemoLog.Lines.Add('Fehlercode für ungültiges Datei-Handle = ' + IntToStr(hFile) + '...bei Datei => "' + FCurFile + '"'); end; end; finally FileClose(hFile); ls_Jahr_vom_DateiDatum := ''; ls_MP3_Tag_Year := ''; li_Korrektur_Jahr := 0; end; end; ... Allen noch einen schönen Mai-Sonntag! :dp: |
AW: Datei-Änderungsdatum auslesen- NUR das Jahr neu setzen und in Datei zurückschreib
Sind die Variablen global? Wenn ja, warum?
|
AW: Datei-Änderungsdatum auslesen- NUR das Jahr neu setzen und in Datei zurückschreib
@Luckie,
nein, die Variable "FCurFile" (= Pfad+Dateiname) ist nicht global (gut aufgepasst). Ich habe hier nur den relevanten Auszug für das Änderungsdatum aufgeführt, da die gesamte Procedure einiges mehr umfasst und hier nur verwirren würde. Aus diesem Grunde hatte ich unter der Var-Deklaration die 3 Punkte gesetzt. Alle Variablen sind lokal in der Procedure hinterlegt. |
AW: Datei-Änderungsdatum auslesen- NUR das Jahr neu setzen und in Datei zurückschreib
Zitat:
|
AW: Datei-Änderungsdatum auslesen- NUR das Jahr neu setzen und in Datei zurückschreib
Hi,
Zitat:
Grüße |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:24 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz