Delphi-PRAXiS
Seite 2 von 3     12 3      

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)

NicoDE 5. Jun 2007 22:00

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

semo 5. Jun 2007 23:21

Re: ordner datum ermittel
 
wieso auch? :zwinker:

SaFu 5. Jun 2007 23: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 08: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 15: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 15:24

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

DeddyH 6. Jun 2007 15: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 21: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 21: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 21: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


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:19 Uhr.
Seite 2 von 3     12 3      

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 by Thomas Breitkreuz