سلام
من می خواهم تمامی پوشه های موجود در یک درایو را در یک لیست داشته باشم این پوشه ها می توانند مخفی و سیستمی و یا جزء پوشه هایی باشند که از طرف سیستم مخفی شده اند!
خیلی ممنون!
سلام
من می خواهم تمامی پوشه های موجود در یک درایو را در یک لیست داشته باشم این پوشه ها می توانند مخفی و سیستمی و یا جزء پوشه هایی باشند که از طرف سیستم مخفی شده اند!
خیلی ممنون!
var
S:TSearchRec;
begin
FindFirst('c:\*.*',faAnyFile,s);
while FindNext(s)=0 do
if s.Attr=faDirectory then
ListBox1.Items.Add(s.Name);
خیلی ممنون ولی من پوشه های مخفی و سیستمی را هم نیاز دارم لطفا راهنمایی کنید!!
آره حق با شماست من حواسم به شرط در برنامه نبود.
هر كاري كردم به يك شرط نتوستم راهش بندازم يه كم مسخره شده ولي كار ميده با شرطه كمي ور بري خودت جواب بهتر پيدا مي كني
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)
خیلی ممنون از لطفتون
ببخشید اگر بخواهیم که تمام پوشه ها(کل پوشه ها و زیر پوشه هایشان)را داشته باشیم ؟؟؟
البته به این شکل:
زحمت مرتب سازيش خودت بكش.
اگر توي درايو 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;
می شود خودتان یک بار امتحانش کنید؟؟
1-پوشه های سیستمی و مخفی نشان داده نمی شود
2-زیر مجموعه ها نشان داده نمی شود
3-برای نام بعضی از پوشه ها دو مرتبه نام پوشه را پشت سر هم نشان می دهد:
D:\1
D:\11
خیلی ممنون
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;
آخرین ویرایش به وسیله سعید صابری : جمعه 16 بهمن 1388 در 17:17 عصر
علاوه بر راهنمایی های دوستمون ، شاید این مقاله هم مفید باشه :
موفق باشید ...
سلام از لطفتون ممنونم!
این کد جدیدتون(پست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;
به هر حال از تمامی دوستانی که کمک کردن خیلی ممنونم
سلام
یه نگاهی به این لینک بنداز
http://www.delphiarea.com/products/d...ents/findfile/
یه کامپوننت سورس بازه ، که خوب کار میکنه و می تونی ازش استفاده کنی و مطالعش کنی
سلام.
اگر احیاناً از دلفی 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;
موفق باشید.