Avatar billede kennethv Nybegynder
03. september 2014 - 08:19 Der er 11 kommentarer og
1 løsning

Folder dato ændring

Jeg har en lille opgave som går ud på at holde styr på nogle mapper og som så skal slettes efter 1 måned. Jeg havde en lille ide om at man kunne bruge "Date modified", men det er kun indholdet i den givende mappe. Hvis der findes en under mappe og der sker ændringer i den mappe, vil toplevel mappens dato ikke ændre sig.

Hvordan kan man klare den sag, hvis der findes mange under mapper på under mappe?
Avatar billede kroning Nybegynder
03. september 2014 - 08:54 #1
Lav en rekursiv procedure der kikker op alle mapper og find er den nyeste dato
Avatar billede kennethv Nybegynder
03. september 2014 - 08:57 #2
Hmm, der stod jeg lige af desværre.

Hvordan skal der klares? Delphi er stadig nyt for mig.
Avatar billede MADOlsen Forsker
03. september 2014 - 09:55 #3
Hvordan skal der klares? Delphi er stadig nyt for mig.

Bortset fra syntax'en klares det vel på samme måde, som i andre sprog ;-)
Avatar billede kennethv Nybegynder
03. september 2014 - 10:02 #4
Korrekt.
Men det ved jeg så heller ikke. :)
Avatar billede MADOlsen Forsker
03. september 2014 - 10:32 #5
Er ikke lige i nærheden af en computer med Delphi på, men nedenstående metode har jeg brugt til at rippe samtlige filnavne i en mappe. Den medtager underfoldere rekursivt, hvis IncludeSubDirs er TRUE.



function ExtractFileNames(Dir: string; IncludeSubDirs: boolean): TStringList;

 
  procedure FindAll(const Dir: String; Attr: Integer; List: TStrings);
  var
    Res: TSearchRec;
    EOFound: Boolean;
  begin
    EOFound:= False;
    if FindFirst(Dir, Attr, Res) < 0 then
      Exit
    else
    begin
      while not EOFound do
      begin
        if (Res.Attr and Attr) <> 0 then
        begin
          List.Add(Res.Name) ;
        end;
        EOFound:= FindNext(Res) <> 0;
      end;
    end;
    FindClose(Res) ;
  end;

var
  ADirectoryList: TStringList;
  i, j:          integer;
  AFile:          TStringList;
  tempResult:    TStringList;
begin
  Result := TStringList.Create;
  ADirectoryList := TStringList.Create;

  FindAll(Dir + '*.*', faAnyFile, Result);

  if IncludeSubDirs then
  begin
    FindAll(Dir + '*', faDirectory, ADirectoryList);
    if ADirectoryList.Count > 0 then
    begin
      for i := 0 to ADirectoryList.Count - 1 do
      begin
        if (ADirectoryList.Strings[i] <> '.')
        and (ADirectoryList.Strings[i] <> '..') then
        begin
          tempResult := ExtractFileNames(Dir + ADirectoryList.Strings[i] + '\', IncludeSubDirs);

          for j := 0 to tempResult.Count - 1 do
            Result.Add(tempResult[j]);

          tempResult.Free;
        end;
      end;
    end;
  end;

  // Remove '..' and '.' and directories
  for i := Result.Count - 1 downto 0 do
    if (Result[i] = '..')
    or (Result[i] = '.')
    or (AnsiPos('.', Result[i]) = 0) then
      Result.Delete(i);

  ADirectoryList.Free;
end;
Avatar billede kennethv Nybegynder
03. september 2014 - 10:52 #6
Hvordan samligner du datoen på toplevel mappe og at den først skal slettes efter 31 dage?
Avatar billede kroning Nybegynder
03. september 2014 - 11:01 #7
Fedeko> Der er ikke meget rekursiv over den procedure
Avatar billede kroning Nybegynder
03. september 2014 - 11:04 #8
Glem det, jeg havde overset et kald
Avatar billede kroning Nybegynder
03. september 2014 - 11:06 #9
Der er jo alt for meget kode i den procedure :-)
Avatar billede MADOlsen Forsker
03. september 2014 - 11:11 #10
Jeg siger ikke, at den er genial, men den sene aften, hvor jeg skulle bruge en liste over navnene på samtlige mp3-filer på min NAS (lang historie), der fungerede den helt efter hensigten ;-)
Avatar billede kennethv Nybegynder
15. oktober 2014 - 09:40 #11
Fedeko: Kan du ligge et svar?
Avatar billede MADOlsen Forsker
15. oktober 2014 - 10:09 #12
Gerne :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester