AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Datei-Änderungsdatum auslesen- NUR das Jahr neu setzen und in Datei zurückschreiben
Thema durchsuchen
Ansicht
Themen-Optionen

Datei-Änderungsdatum auslesen- NUR das Jahr neu setzen und in Datei zurückschreiben

Ein Thema von juergen · begonnen am 29. Apr 2011 · letzter Beitrag vom 1. Mai 2011
Antwort Antwort
Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.175 Beiträge
 
Delphi 11 Alexandria
 
#1

Datei-Änderungsdatum auslesen- NUR das Jahr neu setzen und in Datei zurückschreiben

  Alt 29. Apr 2011, 20:03
Delphi-Version: 2007
Hallo zusammen,

mit den Datumsfunktionen stehe ich wirklich auf dem Kriegsfuss.
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!
Jürgen
Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#2

AW: Datei-Änderungsdatum auslesen- NUR das Jahr neu setzen und in Datei zurückschreib

  Alt 29. Apr 2011, 20:06
Zum de- und enkodieren des Datums kannst du EncodeDateTime() und DecodeDateTime() verwenden. Das liefert dir Tag, Monat, Jahr, Stunde, etc. einzeln zurück.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#3

AW: Datei-Änderungsdatum auslesen- NUR das Jahr neu setzen und in Datei zurückschreib

  Alt 29. Apr 2011, 20:10
Es gibt auch eine Fuktion IncYear() in den DateUtils, die sollte genau das erledigen. SetFileTime() sollte ebenfalls richtig sein - Hilfe siehe msdn.

http://docs.embarcadero.com/products...s_IncYear.html
http://msdn.microsoft.com/en-us/libr...33(VS.85).aspx
  Mit Zitat antworten Zitat
Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.175 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Datei-Änderungsdatum auslesen- NUR das Jahr neu setzen und in Datei zurückschreib

  Alt 1. Mai 2011, 14:28
Hallo zusammen,

kam leider erst heute zum weiteren Bearbeiten, schließlich sind wir auch noch neuer dt. Meister geworden!

Danke zuerst für die Antworten!
IncYear() von jfheins war dann genau das richtige für meinen Anwendungsfall.

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:
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;
...
Verbesserungsvorschläge sind natürlich gern gesehen.

Allen noch einen schönen Mai-Sonntag!
Jürgen
Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

AW: Datei-Änderungsdatum auslesen- NUR das Jahr neu setzen und in Datei zurückschreib

  Alt 1. Mai 2011, 14:36
Sind die Variablen global? Wenn ja, warum?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.175 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Datei-Änderungsdatum auslesen- NUR das Jahr neu setzen und in Datei zurückschreib

  Alt 1. Mai 2011, 14:48
@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.
Jürgen
Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

AW: Datei-Änderungsdatum auslesen- NUR das Jahr neu setzen und in Datei zurückschreib

  Alt 1. Mai 2011, 15:06
da die gesamte Procedure einiges mehr umfasst und hier nur verwirren würde.
Damit hast du dir eigentlich schon selber den Grund gegeben, warum du die Routine in mehrere zerlegen solltest. Einen besseren gibt es nicht. Und wenn dann noch gleiche Variablen in unterschiedlichen Routinen benötigt werden, haben wir den besten Grund für eine Klasse, mit den Variablen als private Felder derselbigen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.381 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Datei-Änderungsdatum auslesen- NUR das Jahr neu setzen und in Datei zurückschreib

  Alt 1. Mai 2011, 15:08
Hi,

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.
warum hast Du diese dann nicht gleich in eine eigenständige Proc/Func ausgelagert? DANN wäre sie wirklich wieder verwendbar....

Grüße
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:48 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz