الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

Deltree من داخل برنامجك

مغلق
بدأه إبراهيم_دياب5 في 23 يونيو 2002 · 0 رد · 429 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1

السلام عليكم إخوانى:

يقوم هذا الكود بمسح فهرس والملفات أو الفهارس الموجودة به على غير RMDir الذى يمسح الفهارس بشرط أن تكون فارغة.

procedure DelTree(const Directory: TFileName);

var

DrivesPathsBuff: array[0..1024] of char;

DrivesPaths: string;

len: longword;

ShortPath: array[0..MAX_PATH] of char;

dir: TFileName;

procedure rDelTree(const Directory: TFileName);

// Recursively deletes all files and directories

// inside the directory passed as parameter.

var

SearchRec: TSearchRec;

Attributes: LongWord;

ShortName, FullName: TFileName;

pname: pchar;

begin

if FindFirst(Directory + '*', faAnyFile and not faVolumeID,

SearchRec) = 0 then begin

try

repeat // Processes all files and directories

if SearchRec.FindData.cAlternateFileName[0] = #0 then

ShortName := SearchRec.Name

else

ShortName := SearchRec.FindData.cAlternateFileName;

FullName := Directory + ShortName;

if (SearchRec.Attr and faDirectory) <> 0 then begin

// It's a directory

if (ShortName <> '.') and (ShortName <> '..') then

rDelTree(FullName + '');

end else begin

// It's a file

pname := PChar(FullName);

Attributes := GetFileAttributes(pname);

if Attributes = $FFFFFFFF then

raise EInOutError.Create(SysErrorMessage(GetLastError));

if (Attributes and FILE_ATTRIBUTE_READONLY) <> 0 then

SetFileAttributes(pname, Attributes and not

FILE_ATTRIBUTE_READONLY);

if Windows.DeleteFile(pname) = False then

raise EInOutError.Create(SysErrorMessage(GetLastError));

end;

until FindNext(SearchRec) <> 0;

except

FindClose(SearchRec);

raise;

end;

FindClose(SearchRec);

end;

if Pos(#0 + Directory + #0, DrivesPaths) = 0 then begin

// if not a root directory, remove it

pname := PChar(Directory);

Attributes := GetFileAttributes(pname);

if Attributes = $FFFFFFFF then

raise EInOutError.Create(SysErrorMessage(GetLastError));

if (Attributes and FILE_ATTRIBUTE_READONLY) <> 0 then

SetFileAttributes(pname, Attributes and not

FILE_ATTRIBUTE_READONLY);

if Windows.RemoveDirectory(pname) = False then begin

raise EInOutError.Create(SysErrorMessage(GetLastError));

end;

end;

end;

// ----------------

begin

DrivesPathsBuff[0] := #0;

len := GetLogicalDriveStrings(1022, @DrivesPathsBuff[1]);

if len = 0 then

raise EInOutError.Create(SysErrorMessage(GetLastError));

SetString(DrivesPaths, DrivesPathsBuff, len + 1);

DrivesPaths := Uppercase(DrivesPaths);

len := GetShortPathName(PChar(Directory), ShortPath, MAX_PATH);

if len = 0 then

raise EInOutError.Create(SysErrorMessage(GetLastError));

SetString(dir, ShortPath, len);

dir := Uppercase(dir);

rDelTree(IncludeTrailingBackslash(dir));

end;

(gift)

هذا الموضوع مغلق.

مواضيع مشابهة