Tech-Ecke / Delphi Inhalt / Datei- und Verzeichnisoperationen |
|
Datei- und Verzeichnisoperationen
Allgemeines
Datei vorhanden?
Verzeichnis vorhanden?
Löschen einer Datei
Kopieren einer Datei
Kopieren eines Ordners (mit Inhalt)
Anwendung:
Datei verschieben
Datei umbenennen
Verzeichnis löschen
Löschen eines Verzeichnisses samt Inhalt Um einen Ordner samt seines Inhalts zu löschen kann man sich folgender Funktion bedienen. benötigt ShellApi in Uses
Aufruf:
Verzeichnis erstellen
Verzeichnis mit Unterverzeichnis erstellen
Datei-Attribute setzen
Ordner
wählen
– benötigt FileCtrl in uses!
|
var Ordner: String;
if
SelectDirectory(('bla bla'),('C:\'),Ordner)
then
// als Startverzeichnis wurde C:\
gesetzt - nicht gewünscht dann ('') |
var SR: TSearchRec; dir: String; begin dir := ('c:\'); if FindFirst(dir+'*.*',faAnyFile,SR) = 0 then begin repeat ListBox1.Items.add(sr.name + ' ' + DateToStr(sr.Time)); // oder mit Angabe der Dateigröße IntToStr(SR.Size) until FindNext(SR)<>0; FindClose(SR); //Nach jedem findfirst nötig, um sr freizugeben! end; end; |
Dateigröße ermitteln – benötigt ShellAPI in uses
function GetFileSize(const
szFile: String): Int64; var fFile: THandle; wfd: TWIN32FINDDATA; begin result := 0; if not FileExists(szFile) then exit; fFile := FindFirstfile(pchar(szFile),wfd); if fFile = INVALID_HANDLE_VALUE then exit; result := (wfd.nFileSizeHigh*(MAXDWORD))+wfd.nFileSizeLow; windows.FindClose(fFile); end; |
Oder Alternative per TSearchRec:
function
GetFileSize(const
DateiPfad: string):
Int64; var SR: TSearchRec; OldMode: Cardinal; Size: TULargeInteger; begin Result := -1; OldMode := SetErrorMode(SEM_FAILCRITICALERRORS); try if FindFirst(DateiPfad, faAnyFile, SR) = 0 then begin Size.LowPart := SR.FindData.nFileSizeLow; Size.HighPart := SR.FindData.nFileSizeHigh; Result := Size.QuadPart; SysUtils.FindClose(SR); end; finally SetErrorMode(OldMode); end; end; |
Aufruf:
Showmessage(IntToStr(GetFileSize('C:\Datei.txt'))); // in Byte |
Ordergröße ermitteln - inkl. aller Dateien und Unterordner
function
GetDirSize(dir: String;
subdir: Boolean): Int64; var rec: TSearchRec; found: Integer; begin Result := 0; if dir[Length(dir)] <> '\' then dir := dir +'\'; found := FindFirst(dir + '*.*', faAnyFile, rec); while found = 0 do begin Inc(Result, rec.Size); if (rec.Attr and faDirectory > 0) and (rec.Name[1] <> '.') and (subdir = true) then Inc(Result, GetDirSize(dir + rec.Name, true)); found := FindNext(rec); end; FindClose(rec); end; |
|
|
Beispiele:
Showmessage(IntToStr(GetDirSize('C:\Ordner',
true)));
// mit Unterordner
in Byte Showmessage(IntToStr(GetDirSize('C:\Ordner', false))); // ohne Unterordner in Byte |
Änderungsdatum einer Datei oder eines Verzeichnis ermitteln
function
GetFileDate(const AFileName:
string):
TDateTime; var SR: TSearchRec; SystemTime: TSystemTime; ModTime: TFileTime; begin Result:=0; if FindFirst(AFileName, faAnyFile, SR)=0 then try if (Windows.FileTimeToLocalFiletime(SR.FindData.ftLastWriteTime, ModTime) and Windows.FileTimeToSystemTime(ModTime, SystemTime)) then Result:=Encodedate(SystemTime.wYear, SystemTime.wMonth, SystemTime.wDay) + Encodetime(SystemTime.wHour, SystemTime.wMinute, SystemTime.wSecond, SystemTime.wMilliseconds); finally SysUtils.FindClose(SR) end; end; |
|
Quelle: Delphi-Treff |
Beispiele:
Showmessage(DateTimeToStr(GetFileDate('C:\Datei.txt'))); |
Die Anwendung gibt des letzten Schreibzugriff zurück. Mögliche Rückgaben: ftCreationTime; ftLastAccessTime; ftLastWriteTime
Die Option Drucken funktioniert erst ab Netscape V4.0 bzw. I-Explorer 5.0 !
[letzte Aktualisierung 15.02.2015]