PDA

View Full Version : لیست کردن تمامی پوشه های یک درایو حتی پوشه های مخفی و سیستمی



عقاب سیاه
دوشنبه 12 بهمن 1388, 16:27 عصر
سلام
من می خواهم تمامی پوشه های موجود در یک درایو را در یک لیست داشته باشم این پوشه ها می توانند مخفی و سیستمی و یا جزء پوشه هایی باشند که از طرف سیستم مخفی شده اند!
خیلی ممنون!

سعید صابری
دوشنبه 12 بهمن 1388, 16:38 عصر
var
S:TSearchRec;
begin
FindFirst('c:\*.*',faAnyFile,s);
while FindNext(s)=0 do
if s.Attr=faDirectory then
ListBox1.Items.Add(s.Name);

عقاب سیاه
دوشنبه 12 بهمن 1388, 18:14 عصر
خیلی ممنون ولی من پوشه های مخفی و سیستمی را هم نیاز دارم لطفا راهنمایی کنید!!:عصبانی++:

سعید صابری
دوشنبه 12 بهمن 1388, 19:13 عصر
خیلی ممنون ولی من پوشه های مخفی و سیستمی را هم نیاز دارم لطفا راهنمایی کنید!!:عصبانی++:
نشون ميده مشكلي نداره خودم امتحان كردم

عقاب سیاه
سه شنبه 13 بهمن 1388, 15:13 عصر
نشون میده مشکلی نداره خودم امتحان کردم
ولی من که امتحان کردم جواب نمیده البته برای پوشه های سیستمی و مخفی:گریه:

سعید صابری
سه شنبه 13 بهمن 1388, 16:59 عصر
ولی من که امتحان کردم جواب نمیده البته برای پوشه های سیستمی و مخفی:گریه:
آره حق با شماست من حواسم به شرط در برنامه نبود.
هر كاري كردم به يك شرط نتوستم راهش بندازم يه كم مسخره شده ولي كار ميده با شرطه كمي ور بري خودت جواب بهتر پيدا مي كني



var
s:TSearchRec;
begin
ListBox1.Clear;
FindFirst('c:\*.*',faAnyFile,s);
while FindNext(s)=0 do
if s.Attr =(faDirectory or faHidden or faSysFile) then
ListBox1.Items.Add(s.Name)
else
if s.Attr = faDirectory then
ListBox1.Items.Add(s.Name)

عقاب سیاه
جمعه 16 بهمن 1388, 10:17 صبح
خیلی ممنون از لطفتون
ببخشید اگر بخواهیم که تمام پوشه ها(کل پوشه ها و زیر پوشه هایشان)را داشته باشیم ؟؟؟
البته به این شکل:

سعید صابری
جمعه 16 بهمن 1388, 11:14 صبح
زحمت مرتب سازيش خودت بكش.
اگر توي درايو c كه زياد پوشه داره جستجو كني يه كم ممكنه زياد طوب بكشه قفل نكرده


procedure TForm1.Xsearch(Path: string);
var
s:TSearchRec;
begin
if path[Length(path)]<>'\' then
Path:=Path+'\';
FindFirst(Path+'*.*',faAnyFile,s);
try
repeat
if (s.Attr =(faDirectory or faHidden or faSysFile)) and (s.Name<>'.') and (s.Name<>'..')then
ListBox1.Items.Add(path+s.Name)
else
if (s.Attr = faDirectory) and (s.Name<>'.') and (s.Name<>'..') then
ListBox1.Items.Add(path+s.Name)
until FindNext(s)<>0;
finally
FindClose(s);
end;
if FindFirst(Path+'*.*',faAnyFile,s) = 0 then
try
repeat
if ((s.Attr and faDirectory) <> 0) and (s.Name<>'.') and (s.Name<>'..') then
xSearch(Path + s.Name);
until findnext(s)<>0;
finally
FindClose(s);
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
Xsearch('C:\NVIDIA');
end;
end;

عقاب سیاه
جمعه 16 بهمن 1388, 11:37 صبح
می شود خودتان یک بار امتحانش کنید؟؟
1-پوشه های سیستمی و مخفی نشان داده نمی شود
2-زیر مجموعه ها نشان داده نمی شود
3-برای نام بعضی از پوشه ها دو مرتبه نام پوشه را پشت سر هم نشان می دهد:
D:\1
D:\11
خیلی ممنون

سعید صابری
جمعه 16 بهمن 1388, 16:20 عصر
var
s:TSearchRec;
begin
if path[Length(path)]<>'\' then
Path:=Path+'\';

if FindFirst (Path +'*.*', faAnyFile , s)=0 then
try
repeat
if s.Attr in[18,22,16] then
if (s.Name<>'.') and (s.Name<>'..') then
ListBox1.Items.Add(path+s.Name);
until findnext(s)<>0 ;
finally
FindClose(s);
end;
if FindFirst(Path+'*.*',faAnyFile,s)=0 then
try
repeat
if ((s.Attr and faDirectory) <> 0) and (s.Name<>'.') and (s.Name<>'..') then
xSearch(Path + s.Name);
until findnext(s)<>0;
finally
FindClose(s);
end;

Mahmood_M
جمعه 16 بهمن 1388, 17:21 عصر
علاوه بر راهنمایی های دوستمون ، شاید این مقاله هم مفید باشه :

روش جستجوی فایلها (http://barnamenevis.org/forum/showthread.php?t=70587)
موفق باشید ...

عقاب سیاه
یک شنبه 18 بهمن 1388, 20:03 عصر
سلام از لطفتون ممنونم!
این کد جدیدتون(پست10) باز هم مشکل دارد!!!:اشتباه:البته مشکل اولش رفع شده اما مشکل دو و سوم ....
------------
با یکمی تغییر در کد مقاله جستجو در فایل ها(پست11)و پست های جناب minair2004 مشکلم حل شد:لبخند:

procedure TForm1.FileSearch(const PathName: string);
var
Rec: TSearchRec;
Path: string;
begin
Path := IncludeTrailingPathDelimiter(PathName);
if FindFirst(Path +'*.*',faSysFile - faHidden - faDirectory , Rec) = 0 then
begin
try
repeat
if Rec.Attr in[18,22,16] then
if (Rec.Name<>'.') and (Rec.Name<>'..') then
ListBox1.Items.Add(Path + Rec.Name);
Application.ProcessMessages;
until FindNext(Rec) <> 0;
finally
FindClose(Rec);
end;
end;
{SubFolders}
begin
if FindFirst(Path + '*.*', faDirectory, Rec) = 0 then
begin
try
repeat
if ((Rec.Attr and faDirectory) <> 0) and (Rec.Name <> '.') and (Rec.Name <> '..') then
begin
FileSearch(Path + Rec.Name);
Application.ProcessMessages;
end;
until FindNext(Rec) <> 0;
finally
FindClose(Rec);
end;
end;
end;
end;
به هر حال از تمامی دوستانی که کمک کردن خیلی ممنونم:خجالت::تشویق:

mossaferin
دوشنبه 19 بهمن 1388, 10:56 صبح
سلام
یه نگاهی به این لینک بنداز

http://www.delphiarea.com/products/delphi-components/findfile/

یه کامپوننت سورس بازه ، که خوب کار میکنه و می تونی ازش استفاده کنی و مطالعش کنی

Naruto
یک شنبه 25 بهمن 1388, 01:10 صبح
سلام.
اگر احیاناً از دلفی 2010 استفاده می کنید روش زیر توصیه میشه.




Uses IOUtils


Procedure TNarutoFrm.ListAllFolders;
Var
Folder : String;
Const RootDrive : String ='C:\';
Begin
For Folder In TDirectory.GetDirectories(RootDrive) Do
ListBox1.Items.Add(Folder);
End;



موفق باشید.