PDA

View Full Version : حرفه ای: بدست اوردن لیست فایل های جدید روی هارد !



mehrdad1991h
دوشنبه 23 اردیبهشت 1392, 10:41 صبح
سلام
خوب روی سیستم عاملی که داریم قراره n دقیقه (کمتر از 30 دقیقه)
یک جستجو کامل انجام بشه (باتوجه به ادرس هایی که کاربر میدهد مثلا درایو سی و دی و .. یا کل سیستم یا ....)
و جدیدترین فایل ها لیست بشه (با توجه به پوسوند هایی که کاربر مد نظر دارد)
و به کاربر نمایش داده بشه

فضا و حجم هارد دیسک مورد استفاده توسط کاربر نامشخص است :/
تعداد هارد دیسک هم نامشخص است
(این ها را گفتم برا اینکه میخوایم سریع ترین روش ممکن را بتونیم پیدا کنیم)

خوب در این حالت باید چی کار کرد باید یه سری بریم کل فایل های جدید را جستجو کنیم بعد تازه از لیستی که بدست اومده پسوند مد نظر کاربر را ببینیم تو کودوم فایل ها هست و جداش کنیم ؟ این که دوباره کاری و دوباره کاری میشه :(:افسرده:

با سرچ در هر دایرکتوری و همینجور ادامه دادن این روند که هیچ کاری نمیشه از پیش برد یک موتور جستجو لازمه فکر میکنم ولی من نمیدونم چجوری میتونم بنویسم یا ازش استفاده کنم !!!:افسرده:

کمی سرچ کردم چیز جالبی به دست نیاوردم نمیدونم چیکار باید بکنم نمونه ای چیزی هم موجود نبود که با توجه به اون بخوام پیش برم

الان از چه طریقی اقدام کنم که هم سریع باشه و هم دقیق ؟
امکانش هست کسی بتونه من را راهنمایی کنه ؟

mehrdad1991h
دوشنبه 23 اردیبهشت 1392, 12:06 عصر
هیچ پیشنهادی نیست ؟
کسی با موتور جستجو تا الان کار نکرده چجوری باید این ها را درست کرد ؟

hamid_hr
دوشنبه 23 اردیبهشت 1392, 12:54 عصر
من برا پيمايش كل هارد اين كارو ميكنم
يك تابع درست ميكنم به تعداد درايو هام اونو با thread فراخواني ميكنم كه بياد ليست كل فايل و فولدراي درايو رو بهم بده
داخل تابع هم به ازاي هر فولدر يك بار اين تابع رو فراخواني ميكنم (با thread) و باز هم ليست فايل و فولدراي ايت مسيرو ميگيرم و ....
اينطوري ميشه يه چيزي شبيه به توابع بازگشتي كه خودشونو دوباره اجرا ميكنن اما با thread
سرعت پيمايش بالا ميره اينجوري

mehrdad1991h
دوشنبه 23 اردیبهشت 1392, 13:29 عصر
من برا پيمايش كل هارد اين كارو ميكنم
يك تابع درست ميكنم به تعداد درايو هام اونو با thread فراخواني ميكنم كه بياد ليست كل فايل و فولدراي درايو رو بهم بده
داخل تابع هم به ازاي هر فولدر يك بار اين تابع رو فراخواني ميكنم (با thread) و باز هم ليست فايل و فولدراي ايت مسيرو ميگيرم و ....
اينطوري ميشه يه چيزي شبيه به توابع بازگشتي كه خودشونو دوباره اجرا ميكنن اما با thread
سرعت پيمايش بالا ميره اينجوري

ممنون از پیشنهادتون
این روش خوبه ولی فکر نمیکنم زیاد کارا باشه برای من
چون مثلا با این روش شما ببین کاربر تنظیم کنه که مثلا هر 5 دقیقه هاردش چک بشه برای فای های جدید اینجوری هنوز سرچ قبلی تموم نشده سرچ جدید شروع میشه (مسئله زمانی را مطرح کردم یعنی میگم بازم زمان زیادی طول میکشه تا نتیجه را اعلام کنه) :گیج:
چیز دیگری وجود داره به نام موتور جستجو نمیدونم چجوری کار میکنن ولی مثل این روش ها نیست یه چیزی تو مایه های جستجوی گوگل مثلا
گوگل نمیاد دونه دونه همه را چک کنه که یه دفعه با تکنولوژی موتور جستجو همه را میاره
یا مثلا خود سرچ ویندوز
یا....
این روش هم خیلی سریع عمل میکنن و هم اینکه حافظه زیاد اشغال نمیکنن جواب را زود میدهند و خیلی امکانات دیگر...

دنبال چنین روشی هستم میخوام ببینم کسی بلد نیست / بریم سراغ منابع خارجی ؟(منبع خارجی هم اگر کسی داره لطف کنه قرار دهد)

بهترین مثال همون سرچ خود ویندوز هست
شما داخل سرچ خود ویندوز فایل های 1 ساعت قبل را جستجو کن خیلی سریع جواب را بهت میده ...چجوری به نظرت یعنی دونه دونه همه فلدر ها را اورده و دیده و جواب را داده ؟ حتما اینطور نیست .... چون اگر اینطور بود کلی زمان میبرد

سپاس

FastCode
چهارشنبه 25 اردیبهشت 1392, 00:33 صبح
جست و جو کنید updatedb و locate
این ها دو برنامه(در واقع یک برنامه) در لینوکس هستن که این کار رو ۱۰۰ برابر سریعتری از چیزی که میخواهی انجام میدن.
میتونید کدشون رو از اینترنت بگیرید و برای ویندوز تغییر بدید.
locate همیشه قبل از 2 ثانیه حواب میده.بدون اغراق.

mehrdad1991h
چهارشنبه 25 اردیبهشت 1392, 12:49 عصر
جست و جو کنید updatedb و locate
این ها دو برنامه(در واقع یک برنامه) در لینوکس هستن که این کار رو ۱۰۰ برابر سریعتری از چیزی که میخواهی انجام میدن.
میتونید کدشون رو از اینترنت بگیرید و برای ویندوز تغییر بدید.
locate همیشه قبل از 2 ثانیه حواب میده.بدون اغراق.

خوب اقا این الان سورسش هست فک کنم
http://packages.debian.org/wheezy/locate
از منار سمت راست در قسمت دانلود میتونید سورس را دانلود کنید
خوب الان اینا انگاری همش دستور لینوکس هست
یه جوریه :افسرده: فکر میکنم یا این سورسش نیست یا چیز دیگه ای اخه سورس من تو اینا ندیدم :)
بعد سورس به چه زبانی خواهد بود ؟
تا اینجا یی هم که من فهمیدم با این دستور فقط میشه دنبال فلدر و فایل گشت نمیشه دنبال یه زمان خاصی چیزی گشت ...

FastCode
چهارشنبه 25 اردیبهشت 1392, 15:44 عصر
فقط فایل و دایرکتوری؟
این دستور صبح ها نون هم میگیره.
خروجی رو میتونید هر طوری که دوست دارید تغییر بدید.در لینوکس از ls xargs و awk استفاده میکنند.شما میتونید در کدتون این کار رو بکنید.
http://ftp.de.debian.org/debian/pool/main/f/findutils/findutils_4.4.2.orig.tar.gz

mehrdad1991h
چهارشنبه 25 اردیبهشت 1392, 16:36 عصر
فقط فایل و دایرکتوری؟
این دستور صبح ها نون هم میگیره.
خروجی رو میتونید هر طوری که دوست دارید تغییر بدید.در لینوکس از ls و awk استفاده میکنند.شما میتونید در کدتون این کار رو بکنید.
http://ftp.de.debian.org/debian/pool/main/f/findutils/findutils_4.4.2.orig.tar.gz

فقط نون میگیره ؟ نون خالی سودی نداره که کره - پنیر - مرب و... هم لازمه... :لبخندساده: بعدش اگه لقمه هم بگیره دیگه خیلی خوب میشه ها لقمه نمیگیره ؟:بامزه:

بگذریم نگرفتی منظور من چیه
ببین من قراره بر اساس تاریخ و زمان جستجو هام را انجام بدم دیگه ؟ نام فایل یا دایرکتوری را که ندارم !

حالا یک سوال ! به نظرتون از API خود ویندوز برای سرچ استفاده کنم به نتیجه میرسم یا موجب ضرر و بدبختی است:متفکر: (در مواقعی که مثلا قراره 10 ترابایت را جستجو کنه)
کسی امتحان نکرده ؟

FastCode
چهارشنبه 25 اردیبهشت 1392, 17:02 عصر
فقط نون میگیره ؟ نون خالی سودی نداره که کره - پنیر - مرب و... هم لازمه... :لبخندساده: بعدش اگه لقمه هم بگیره دیگه خیلی خوب میشه ها لقمه نمیگیره ؟:بامزه:

بگذریم نگرفتی منظور من چیه
ببین من قراره بر اساس تاریخ و زمان جستجو هام را انجام بدم دیگه ؟ نام فایل یا دایرکتوری را که ندارم !

حالا یک سوال ! به نظرتون از API خود ویندوز برای سرچ استفاده کنم به نتیجه میرسم یا موجب ضرر و بدبختی است:متفکر: (در مواقعی که مثلا قراره 10 ترابایت را جستجو کنه)
کسی امتحان نکرده ؟
API خود ویندوز اگر میتونست ۱۰ ترابایت رو ایندکس کنه توی همون explorer درست کار میکرد.
این برنامه میتونه این کار رو هم برای شما انجام بده.فقط یک مقدار تغییر میخواد که فکر نمیکنم کاری داشته باشه.
فقط برای استفاده از این برنامه در ویندوز باید API های کار با فایل رو hook کنید و index رو همیشه به روز نگه دارید.
این کار در لینوکس انجام نشده چون لازم نبوده و فقط سرعت رو کم میکنه.ولی چون در ویندوز کسی به این چیزها اهمیت نمیده نباید مشکلی داشته باشه.
با این روش میتونید تاریخ رو هم در دیتابیس داشته باشید.در غیر این صورت میتیونید تاریخ رو از خود فایل بگیرید.حجم فایل هم همین داستان رو داره.

mehrdad1991h
چهارشنبه 25 اردیبهشت 1392, 20:01 عصر
خیلی خوب اقا با همین روش locate اوکی شده یه چیزایی
اومدیم یه دیتابیس درست کردیم فایل ها را سرچ میکنیم میریزیم تو دیتابیسمون
موقع جستجو خیلی سریع فایلا را که میخوایم نشونمون میده بسیار عالی است سرعت جستجو

ولی مشکل داریم !!!
هر وقت فایل جدید بزاریم تو سیستم خودکار تو دیتابیس نمیره باید هر چند وقت یه بار دیتابیس را اپدیت کنیم
الان این اپدیت شدنش زمان میبره !!!

چجوری هر فایلی که اضافه شد خودکار به دیتابیس اضافه اش کنم ؟

FastCode
چهارشنبه 25 اردیبهشت 1392, 20:29 عصر
خوشحالم که سرعت خوبه.


چجوری هر فایلی که اضافه شد خودکار به دیتابیس اضافه اش کنم ؟
گفتم که چه کار کنید:

فقط برای استفاده از این برنامه در ویندوز باید API های کار با فایل رو hook کنید و index رو همیشه به روز نگه دارید.روی ویندوز کامپایل شد؟ممکنه یک کپیش رو به من بدید برای تست؟