هدا مثال عن عملية التفريق بين الملف والمجلد موجود في المرفق
لقد اعتمدت على خاصية النقطة
خاصية النقطة هي الخاصية التي تتميز بها الملفات فنجد اسم الملف يحتوي على نقطة في اغلب الحلات مثلا text.txt
و المجلدات في اغلب الحلات لا تحتوي على النقطة
ولكن عندما يكون اسم المجلد مثلا new.1 في هده الحالة تفشل هده الخاصية ويضن البرنامج ان المجلد هو عبارة على ملف فيصنفه في خانت الملفات
وعندما اجد الجواب عن هدا السؤال : كيف نفرق بين المجلد والملف في الدلفي ؟
نستطيع الدخول الى المجلدات والبحت داخله وهكدا دوليك ....
كن متواضعا ولا تكن متكبرا // الصبر + المثابرة = النجاح
[COLOR="black"]لاستحضار قائمة المجلدات الفرعية من مجلد رئيسي:
PHP كود :
function Dir_CountDir(strPathName: String;bRecurseDir : Boolean):Integer; var strTempPath : string; nCount : integer; hFindFile : THandle; FindData : TWin32FindData; Begin nCount := 0; Result := 0; strTempPath := strPathName+'\*.*'; hFindFile := Windows.FindFirstFile(PChar(strTempPath),FindData); if hFindFile = INVALID_HANDLE_VALUE then Exit; repeat if (IsChildDir(FindData)) then begin nCount := nCount+1; if bRecurseDir then begin strTempPath := strPathName+'\'+FindData.cFileName; nCount := nCount+Dir_CountDir(strTempPath,bRecurseDir); end; end; until (not Windows.FindNextFile(hFindFile,FindData)); Windows.FindClose(hFindFile); Result := nCount; end;
function IsChildDir (var lpFindData : TWin32FindData) : Boolean; var b : boolean; begin Result := ((lpFindData.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) <>0); b := (lpFindData.cFileName[0] <> '.'); Result := (Result and b); end;
مثال البحث عن الملفات:
PHP كود :
procedure FindFiles(FilesList: TStringList; StartDir, FileMask: string); var SR: TSearchRec; DirList: TStringList; IsFound: Boolean; i: integer; begin if StartDir[length(StartDir)] <> '\' then StartDir := StartDir + '\';
// Build a list of the files in directory StartDir
IsFound := FindFirst(StartDir + FileMask, faAnyFile-faDirectory, SR) = 0; while IsFound do begin FilesList.Add(StartDir + SR.Name); IsFound := FindNext(SR) = 0; end; FindClose(SR);
// Build a list of subdirectories DirList := TStringList.Create; IsFound := FindFirst(StartDir+'*.*', faAnyFile, SR) = 0; while IsFound do begin if ((SR.Attr and faDirectory) <> 0) and (SR.Name[1] <> '.') then DirList.Add(StartDir + SR.Name); IsFound := FindNext(SR) = 0; end; FindClose(SR);
// Scan the list of subdirectories for i := 0 to DirList.Count - 1 do FindFiles(FilesList, DirList[i], FileMask);
function IsDirectory( sr : TSearchRec ) : boolean;
begin
isDirectory := ((sr.Attr and faDirectory > 0)
and
(sr.Name <> '.') and (sr.Name <> '..'));
end;