View Full Version : بدست آوردن نام درایو ها و نام پوشه ها و نام زیر پوشه ها و نام فایل های موجود در آن
hamid-nic
شنبه 30 اردیبهشت 1391, 01:03 صبح
سلام دوستان ، وقتتان بخیر
در برنامه ای می خواهم نام تمام درایو ها موجود در سیستم به همراه نام پوشه ها و نام زیر پوشه ها و نام فایل های موجود در اون ها را به تفکیک هر درایو بدست آورده و در یک فایل متنی (txt) ذخیره کنم .
دوستان در صورت امکان راهنمایی بفرمایید به چه شکلی باید این کار را انجام بدهم .
ممنون
Felony
شنبه 30 اردیبهشت 1391, 05:53 صبح
این کد رو الان نوشتم و تست نکردم ولی فکر نمیکنم مشکلی داشته باشه ، کتابخانه IOUtils رو هم به Uses اضافه کنید :
var
Drive, Dir, Filename: string;
StrList: TStringList;
List: TFileStream;
begin
for Drive in TDirectory.GetLogicalDrives do
if (GetDriveType(PWideChar(Drive)) <> DRIVE_CDROM) then
begin
StrList := TStringList.Create;
try
StrList.Add(Drive);
for Dir in TDirectory.GetDirectories(Drive, '*', TSearchOption.soAllDirectories) do
begin
StrList.Add(Dir);
for Filename in TDirectory.GetFiles(Dir, '*.*') do
StrList.Add(Filename);
StrList.Add('---------------------------------------------------');
end;
StrList.SaveToFile(system.SysUtils.ExtractFilePath (Application.ExeName) + 'FileList.txt');
finally
StrList.Free;
end;
end;
end;
hamid-nic
شنبه 30 اردیبهشت 1391, 21:46 عصر
من برای دلفی 7 دارم می نویسم اما مثل اینکه کتابخانه IOUtils برای دلفی 7 وجود نداره . به نظر شما با دلفی 7 میشه از این کد نتیجه گرفت ؟
BORHAN TEC
شنبه 30 اردیبهشت 1391, 23:46 عصر
من برای دلفی 7 دارم می نویسم اما مثل اینکه کتابخانه IOUtils برای دلفی 7 وجود نداره . به نظر شما با دلفی 7 میشه از این کد نتیجه گرفت ؟ خیر، کدی که آقا ماهان نوشته اند بر روی دلفی 2010 و نسخه های بعد از اون اجرا میشه.
برای دلفی 7 بهتره که از مثالی که ضمیمه کرده ام استفاده کنید. (منبع این مثال کتاب Mastering Delphi 7 هست)
در هر صورت اگر سرعت جستجو برای شما خیلی مهمه می تونید از SDK مربوط به نرم افزار EveryThing استفاده کنید که در کسری از ثانیه میتونه به جستجوی کل اطلاعات هارد دیسک شما بپردازه. اگر با این نرم افزار تا بحال کار نکرده اید پیشنهاد می کنم که دانلودش کنید تا دقیقاً متوجه بشین که چه سرعت حیرت آوری در جستجوی فایلها داره! :چشمک:
این هم آدرس سایتش هستش:
http://www.voidtools.com/
mbshareat
یک شنبه 31 اردیبهشت 1391, 14:00 عصر
سلام
بهتره اول متغیری از نوع TStrings داشته باشیم و با Add آدرسها رو یکی یکی به اون اضافه کنیم بعد Strings.Text این متغیر رو یکباره به لیست باکس بدیم که سرعت بالا بره.
hamid-nic
یک شنبه 31 اردیبهشت 1391, 22:33 عصر
در هر صورت اگر سرعت جستجو برای شما خیلی مهمه می تونید از SDK مربوط به نرم افزار EveryThing استفاده کنید که در کسری از ثانیه میتونه به جستجوی کل اطلاعات هارد دیسک شما بپردازه.
آقای عشایری عزیز خیلی ممنون از راهنمایی و محبتتون
این برنامه که معرفی کردید فوق العاده سرعت خوبی داره !!! از سایتش sdk را دانلود کردم به چه نحوی باید بکاربرد در دلفی ؟؟
lord_viper
دوشنبه 01 خرداد 1391, 08:47 صبح
این کد تو دلفی 7 جواب میده
تابع جستجو به صورت بازگشتی
procedure findfile(a,s:string);
var
f:tsearchrec;
begin
if findfirst(a+s,faanyfile,f)=0 then
repeat
if f.Attr<>fadirectory then
form1.ListBox1.Items.Add(a+f.Name);
until findnext(f)<>0;
findclose(f);
if findfirst(a+'*',fadirectory,f)=0 then
repeat
if (f.Attr and fadirectory=fadirectory)and(f.Name<>'.')and(f.Name<>'..')then
findfile(a+f.Name+'\',s);
until findnext(f)<>0;
findclose(f);
end;
جستجو در یک درایو یا همه درایوها
procedure TForm1.Button1Click(Sender: TObject);
var
b,m:integer;
n:string;
begin
b:=combobox1.ItemIndex;
n:=combobox1.Items.Strings[b];
if b>-1 then
findfile(n,edit2.Text)
else
for m:=0 to combobox1.Items.Count-1 do
findfile(combobox1.Items.Strings[m],edit2.Text);
end;
گرفتن لیست درایوهای کامپیوتر
procedure TForm1.FormCreate(Sender: TObject);
var
x:char;
v:string;
begin
combobox1.Text:='alldrive';
for x:='a' to 'z' do
begin
v:=x+':\';
if getdrivetype(pchar(v))=DRIVE_FIXED then
combobox1.Items.Add(v);
end;
end;
hamid-nic
دوشنبه 01 خرداد 1391, 22:28 عصر
ممنون cayberfox عزیز
ولی همچنان سرعت پایینی در جست و جو داره .
اون sdk که توی چندتا پست قبلی بود را چطور میشه به دلفی معرفی و با هاش کار کرد ؟؟؟
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.