PDA

View Full Version : سوال: جستجوی فابل در کل کامپیوتر با C#‎



amubehnam
پنج شنبه 30 خرداد 1392, 17:54 عصر
سلام دوستان من میخوام به محض اینکه فلش رو وارد کامپیوتر کردم تمام فایل های متنی (به طور مثال txt.*) رو توی فلشم بریزه.

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

ممنون میشم کمک کنید.

mehrdad1991h
پنج شنبه 30 خرداد 1392, 19:16 عصر
سلام دوستان من میخوام به محض اینکه فلش رو وارد کامپیوتر کردم تمام فایل های متنی (به طور مثال txt.*) رو توی فلشم بریزه.

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

ممنون میشم کمک کنید.

بهتره از موتور جستجو استفاده کنی
اول جستجو کن کل هارد را بعد ادرس ها مشخصه دیگه همه را کپی بزن....
البته این که میگی به محض اینکه فلش را میزنه اطلاعات کپی بشه این یکم ناجوره چون سیستم طرف مثلا 10 ترابایت هارد داشته باشه در بهترین حالت حداقل 10-15 دقیقه زمان لازمه تا کل هارد (در مثال من 10 ترابایت منظورم بود) جستجو بشه

موتور جستجو از جستجو گر خود ویندوز میتونی استفاده کنی و کار های دیگه ای هم میتونی بکنی برای خود ویندوز سرچ کن با API میتونی انجام بدی فک کنم dll اش را خود ماکروسافت گذاشته بود
درست یادم نیست یه سرچ بزن تو گوگل ....

موفق باشید

Salar Ashgi
پنج شنبه 30 خرداد 1392, 21:23 عصر
دوستان عزیز حالا نمیدونم این کار رو واسه چی میخواین ، چون اصلا منطقی بنظر نمیاد !!
چراکه بسته به RAM سیستم مقصد ، اگه این کار بهینه انجام نشه ، ممکنه دچار Exception بشید .
ولی بهرحال جهت جستجو در تمام پوشه ها :



string[] ar = System.IO.Directory.GetFiles("C:\\", "*.txt", System.IO.SearchOption.AllDirectories);


در ضمن ممکنه اصلا شما دسترسی Read به هیچ درایوی نداشته باشید ، که در اینصورت با Error مواجه میشید ./

sohil_ww
پنج شنبه 30 خرداد 1392, 22:03 عصر
دوستان عزیز حالا نمیدونم این کار رو واسه چی میخواین ، چون اصلا منطقی بنظر نمیاد !!
چراکه بسته به RAM سیستم مقصد ، اگه این کار بهینه انجام نشه ، ممکنه دچار Exception بشید .
ولی بهرحال جهت جستجو در تمام پوشه ها :



string[] ar = System.IO.Directory.GetFiles("C:\\", "*.txt", System.IO.SearchOption.AllDirectories);


در ضمن ممکنه اصلا شما دسترسی Read به هیچ درایوی نداشته باشید ، که در اینصورت با Error مواجه میشید ./
تو این روش فولدر هایی که سطح دسترسی نداشته باشن بهتر نیست هر درایوو و فولدرهاشو جدا جدا سرچ زد ؟!

amubehnam
شنبه 01 تیر 1392, 13:46 عصر
باتشکر از دوستان

ولی توی روشی که Soheil-ww گفتند ما نمیتونیم این کا رو انجام بدیم.
به طور مثال من میخوام وارد درایو D بشه بره توی اولین پوشه ،دوباره بره توی اولین پوشه و همین طور تا به انتهاتا به فایل متنی برسه اون رو کپی کنهتو فلش و بعد برگرده به یک مرحله قبل105974

icegirl_f2r
جمعه 19 تیر 1394, 18:28 عصر
دوستان ببخشید حالا اگه بخوایم این جستجو بصورت موازی انجام بگیره باید چیکار کنیم؟

pbm_soy
شنبه 20 تیر 1394, 01:21 صبح
اگه بخواهید جستجوها موازی انجام بشن میتوانید جستجوی هر درایو را به یک thread بدید
ولی ساده ترین کاری که به فکر من رسید و البته با حداقل کد نویسی اینه که از دستورات خود ویندوز برای جستجو و گرفتن لیست فایلها استفاده کنید مثلا دستور زیر تمام فایلها با پسوند txt در درایو جاری را در فایلی به نام mylist.ttt ذخیره میکند
Dir *.txt /s >mylist.ttt
حالا میتوانید محتوای فایل ایجاد شده را با دستورات فایل یا stream reader بخوانید و نام مسیر فایلهای موردنظر را پیدا کرده و کپی را انجام دهید اینطوری دیگه میتوانید بخش جستجو کردن فایلها را از عهده برنامه خارج کنید
در ضمن توسط متد start کلاس process میتوانید دستورات و فایلهای اجرایی ویندوز را اجرا کنید
البته الان که این مطلب را دارم مینویسم مورد دیگری که به ذهنم رسید اینه که شاید بتونید کل کار جستجو کپی کردن را با بچ فایلهای ویندوز هم انجام بدید!

Felony
شنبه 20 تیر 1394, 09:46 صبح
فایل سیستم های مختلف دارای یک Metadata شامل اسم فایل ها ، Permission ها ، تاریخ Create, Modify و ... هستند که اصولا بعد از بوت سکتور نگهداری میشن ، مثلا در NTFS اسمش MFT (http://en.wikipedia.org/wiki/NTFS#Internals) هست ، فایل های رو دیسک یکسری دیتای باینری هستند که فقط ابتدا و سایز دارن که پشت سر هم روی دیسک نوشته میشن و اطلاعات اضافی مربوط به این فایل ها شامل آدرس شروع ، سایز ، مسیر و نام ، خصیصه ها و ... در MFT نگهداری میشن ؛ این موراد در فایل سیستم های مختلف ساختارهای متفاوتی داره ولی درکل شالوده همه ی فایل سیستم ها هست به جز فایل سیستم های خاص که خارج از بحث هست .

بهتره به جای این کارا برای چند فایل سیستم معروف و هدف ( احتمالا برای شما FAT و NTFS ) بری و MFT رو بخونی و بعد رو لیست فایل ها جستجوت رو بزنی و فایل ها رو کپی کنی ، کل عملیات جستجو فایل کمتر 1 ثانیه طول میکشه .

icegirl_f2r
شنبه 20 تیر 1394, 16:04 عصر
ببخشید من فقط میخوام بطور موازی جستجو انجام بدم نیازی ب کپی آنها ندارم.
میخوام دقیقا با برنامه نویسی موازی سازی را انجام بدم.
این که شما میگید سر در نمیارم :ناراحت:مگر thread و task

Felony
شنبه 04 مهر 1394, 08:54 صبح
Directory.EnumerateFiles("@D:\").AsParallel();