03. september 2014 - 08:19Der 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?
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
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);
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 ;-)
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.