Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   ordner datum ermittel (https://www.delphipraxis.net/93388-ordner-datum-ermittel.html)

SaFu 5. Jun 2007 08:53


ordner datum ermittel
 
Guten morgen

Ich würde gerne in einem Ordner alle dorner verschieben die ein niedriegeres datum haben wie das aktuelle datum wie lese ich jetzt aus einem Pfad diese angaben raus.

Delphi-Quellcode:
" if DirectoryExists ((ExtractFilePath(ParamStr(0)))+'Vertretungspläne\')<= DateToStr(Date);
so nicht das weiss ich aber wie bekomme ich davon das datum zurück??

DeddyH 5. Jun 2007 09:01

Re: ordner datum ermittel
 
Hallo, mit FindFirst und FindNext kannst Du einen TSearchRec befüllen. Dieser enthält das Feld Time. Mit FileDateToDateTime kannst Du dieses in einen TDateTime wandeln. Ich hoffe, diese Infos genügen Dir.

SaFu 5. Jun 2007 16:44

Re: ordner datum ermittel
 
bezieht sich das nicht auf eine datei ??

Ich brauch aber das datum von einem mehreren Ordnern
die in einem Übergeordneten ordner stecken.

SaFu 5. Jun 2007 16:48

Re: ordner datum ermittel
 
Ja habe es gerade versucht es bezieht sich auf dateien wie gesagt ich brauch das Datum vom Ordner (mehrere)
Delphi-Quellcode:
  Datei := ExtractFilePath(ParamStr(0))+'Vertretungspläne\test.txt';
  Datum := fileDateToDateTime(FileAge(datei));
so habe ich jetzt es mal versucht gibt es da sowas wie DirectoryDateToDateTime

DeddyH 5. Jun 2007 16:49

Re: ordner datum ermittel
 
Du kennst das Flag faDirectory?

NicoDE 5. Jun 2007 16:51

Re: ordner datum ermittel
 
Zitat:

Zitat von fuknersascha
bezieht sich das nicht auf eine datei ?

Nein. Man kann damit natürlich auch Verzeichnisse finden.

SaFu 5. Jun 2007 17:11

Re: ordner datum ermittel
 
nee das kenne ich leider noch nicht beschäftige mich gerade mit so sachen wie ordner verschieben löschen, kopieren unw.

in der Delphi hilfe steht ja nicht soviel drin

hoika 5. Jun 2007 17:16

Re: ordner datum ermittel
 
Hallo,

ein Ordner ist auch nur eine Datei im Dateisystem,
mit einem speziellen Flag natürlich.

Willst du mehrere Ordner verschieben,
musst du die Ermitteln, das geht ohne Rekursion,
wenn es nur um eine Ebene geht,
falls du Ordner in Ordner suchst, muss du Rekursion benutzen.

Eine Suche hier nach FindFirst sollte mind. ein Bsp finden.


Heiko

DeddyH 5. Jun 2007 17:17

Re: ordner datum ermittel
 
Schau Dir das hier mal an:
Delphi-Quellcode:
function GetDirDate(const Dir: string): TDateTime;
var Rec: TSearchRec;
    i: integer;
begin
  Result := 0;
  i := FindFirst(Dir,faDirectory,Rec);
  if i = 0 then
    Result := FileDateToDateTime(Rec.Time);
  SysUtils.FindClose(Rec);
end;
Ist doch das, was ich beschrieben habe, oder?

SaFu 5. Jun 2007 19:55

Re: ordner datum ermittel
 
Mach ich da was falsch

Delphi-Quellcode:
function TForm7.GetDirDate(const Dir: string): TDateTime;
var Rec: TSearchRec;
    i: integer;
    a :String;
begin
  Result := 0;
  i := FindFirst(Dir,faDirectory,Rec);
  if i = 0 then
    Result := FileDateToDateTime(Rec.Time);
  SysUtils.FindClose(Rec);
  Showmessage(IntToStr(i));
end;

procedure TForm7.Button11Click(Sender: TObject);
begin
  GetDirDate((ExtractFilePath(ParamStr(0)))+'Vertretungspläne\');
end;

NicoDE 5. Jun 2007 21:00

Re: ordner datum ermittel
 
Ohne abschließendes '\' suchen, dann geht's auch.

semo 5. Jun 2007 22:21

Re: ordner datum ermittel
 
wieso auch? :zwinker:

SaFu 5. Jun 2007 22:49

Re: ordner datum ermittel
 
Ok stimmt so gehts

aber bekomme ich jetzt nicht das datum zurück vom VertretungsplanOrdner

Delphi-Quellcode:
procedure TForm7.Button11Click(Sender: TObject);
begin
  datord:= GetDirDate((ExtractFilePath(ParamStr(0)))+'Vertretungspläne');
end;
Ich würde gerne alle Ordner auslessen im Verzeichniss unter dem vertretungsplanordner und sie dann verschieben lassen wenn sie kleiner sind als das aktuelle datum ungefähr so

Delphi-Quellcode:
 if (datord) <= (date) Then
begin
.
.
.

marabu 6. Jun 2007 07:18

Re: ordner datum ermittel
 
Guten Morgen Sascha,

vielleicht liege ich ja falsch, aber aus dem, was ich von dir hier und an anderer Stelle gelesen habe, weiß ich, dass du in einem Ordner "Vertretungspläne" Unterordner anlegst, deren Namen aus einem Präfix "KW", der Kalenderwoche und der Jahreszahl gebildet werden.

Eine kleine Änderung der Bildungsregel für die Ordnernamen wäre hilfreich: Verbaue zuerst die Jahreszahl und dann die Kalenderwoche und achte auf führende Nullen:

Delphi-Quellcode:
function GetFolderName(dt: TDateTime): string;
begin
  Result := Format('KW%.4d%.2d', [YearOf(dt), WeekOfTheYear(dt)]);
end;
So kannst du die Ordnernamen über einen String-Sort chronologisch sortieren. Hole dir die Unterordner einfach in eine StringList:

Delphi-Quellcode:
procedure GetSubFolders(folder: string; s: TStrings);
var
  sr: TSearchRec;
begin
  folder := IncludeTrailingPathDelimiter(folder);
  if FindFirst(folder + '*.*', faDirectory, sr) = 0 then
  try
    repeat
      if (sr.Name = '.') or (sr.Name = '..') then
        Continue
      else
      if (sr.Attr and faDirectory) = faDirectory then
        s.Add(sr.Name);
    until FindNext(sr) <> 0;
  finally
    FindClose(sr);
  end;
end;

// ...

const
  BASE_FOLDER = 'C:\Daten\Vertretungspläne';
var
  fn: TFileName;
  folders: TStringList;
begin
  folders := TStringList.Create;
  GetSubFolders(BASE_FOLDER, folders);
  folders.Sort;
  // ...
end;
Jetzt kannst du einfach durch die Liste iterieren und alles, was zu alt ist, verschieben. Wozu brauchst du das Datum der Ordner aus dem Dateisystem, wenn es bereits im Ordnernamen enthalten ist? Wenn aber doch, dann bedenke, dass es dort ein CreationDate und ein LastWriteDate gibt.

Alles nur getippt und nicht getestet.

Freundliche Grüße

SaFu 6. Jun 2007 14:06

Re: ordner datum ermittel
 
Ja genau das habe ich vor ich lasse mir die Ordner in einem ShellTreeView anzeigen, und alle die älter sind als die Aktuelle KW werden verschoben.

Zitat:


Wozu brauchst du das Datum der Ordner aus dem Dateisystem, wenn es bereits im Ordnernamen enthalten ist?

Ich Habe halt gedacht es wäre einfacher darüber weil ich ja die Ordner vergleichen wollte und hätte somit anstatt einen String mit einem Integer einen Integer mit integer verglichen?

Aberr w enn es so geht soll es mir auch recht sein muss mich halt nur jetzt etwas reinarbeiten um das ganze auch zu verstehn.

Zitat:

Verbaue zuerst die Jahreszahl und dann die Kalenderwoche und achte auf führende Nullen:
Ja das ist mir auch aufgefallen wenn ich nämlich einen ordner erstelle mit 2008 und der KW2 und es existiert ein Ordner mit 2007 KW2 ist es nicht mehr nach jahren geordnet.


Wie gesagt werde mir das von dir mal genau anschauen

SaFu 6. Jun 2007 14:24

Re: ordner datum ermittel
 
Also wenn ich erhlich bin verstehe ich den code nicht ganz :(

DeddyH 6. Jun 2007 14:30

Re: ordner datum ermittel
 
Hab noch mal eine genauere Version erstellt.
Delphi-Quellcode:
type TZeit = (zCreation, zLastAccess, zLastWrite); //Erstellt, letzter Zugriff, letzte Änderung

function GetDirDate(const s: string;Zeit: TZeit = zCreation): TDateTime;
var Data: TWin32FindData;
    sTime: TSystemTime;
    h: THandle;
begin
  Result := 0;
  ZeroMemory(@Data,SizeOf(Data));
  h := FindFirstFile(PChar(s),Data);
  if h <> INVALID_HANDLE_VALUE then
    begin
      if (Data.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) > 0 then
        begin
          case Zeit of
            zCreation : FileTimeToSystemTime(Data.ftCreationTime,sTime);
            zLastAccess: FileTimeToSystemTime(Data.ftLastAccessTime,sTime);
            zLastWrite : FileTimeToSystemTime(Data.ftLastWriteTime,sTime);
          end;
          Result := SystemTimeToDateTime(sTime);
        end;
    end;
  Windows.FindClose(h);
end;

SaFu 7. Jun 2007 20:32

Re: ordner datum ermittel
 
Hi

Jetzt bin ich total verwirt welcher code macht was, welcher ist besser und wie gehe ich mit dem um, um ein brauchbares ergebnis zu erziehlen

sorry das ich so bescheuert frage kannmir nicht einer den Code erklären??

marabu 7. Jun 2007 20:47

Re: ordner datum ermittel
 
Hallo Sascha,

du schreibst, dass du meinen Code nicht ganz verstehst. Was genau bereitet dir Schwierigkeiten?

Hast du dich denn inzwischen entschieden, ob du die Zeitangaben aus dem Ordnernamen zurückgewinnen oder doch lieber auf den Zeitstempel des Dateisystem zurückgreifen möchtest?

Grüße nach Bad Offenbach

SaFu 7. Jun 2007 20:55

Re: ordner datum ermittel
 
Also Praktischer wäre natürlich denn zeitstempel dem ich den Ordner selber gebe wie du ja bereits erwähnt hast(wenn es einfacher ist).

naja ich weis nicht genau wie ich das anwenden soll.

Es nutzt mir auch teilweise nichts wenn ich was kopiere und es dann nichteinmal versteh das meiste wissen was ich über delphi habe, habe ich hier im forum gelernt.

kann man das nicht einfacher gestallten das man alle Ordner in dem Shelltreeview die einen kleinere KW alls das aktuelle datum einfach verschiebt oder muss das so "aufwendig" sein

SaFu 7. Jun 2007 21:02

Re: ordner datum ermittel
 
Achso was z.b heist das

Delphi-Quellcode:
IncludeTrailingPathDelimiter

????????????

bitsetter 7. Jun 2007 22:02

Re: ordner datum ermittel
 
Hallo,

steht bei dir dazu nichts in der Delphi Hilfe, falls nicht:

Zitat:

Die Funktion stellt sicher, dass ein Pfadname mit einem Begrenzungszeichen endet.
...
Beschreibung

IncludeTrailingPathDelimiter stellt sicher, dass ein Pfadname mit einem Begrenzungszeichen endet ('\" in Windows, '/' in Linux). Wenn S bereits mit einem Begrenzungszeichen endet, wird S unverändert zurückgegeben; ansonsten wird S mit dem angehängten Begrenzungszeichen versehen.

Hinweis: IncludeTrailingPathDelimiter arbeitet mit Multibyte-Zeichensätzen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:35 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