PDA

View Full Version : جستجوی تمام هارد



xrezax
دوشنبه 29 آبان 1391, 15:17 عصر
دوستان این پروژه ای که ضمیمه کردم توی text1.text باید خودم درایو براش تعریف کنم تا اون درایو سرچ کنه. من می خوام اتوماتیک تمام هارد را جستجو کنه و دونه دونه درایوهارو سرچ کنه و فایل های خواسته شده را لیست کنه.
ممنون میشم کسی بتونه ایدیتش کنه برام

volkswagen
دوشنبه 29 آبان 1391, 18:43 عصر
سلام

کاری نداره ، تنها کاری که باید بکنید این هست که یک کنترل درایو بزارید روی فرم ، بعد یکی یکی درایوها رو بخونید(درون یک تایمر) و وقتی جستجو در یک درایو تمام شد ، درایو بعدی که مثلا d هست رو در text1 کپی کنید و دکمه search رو فراخوانی کنید.اگه بخوام بهتر بگم ، درون یک کنترل تایمر باید بررسی کنید که آیا عمل سرچ به اتمام رسیده یا نه ، اگر تموم شد برنامه درایو بعدی رو از داخل کنترل درایو می خونه و در تکست کپی می کنه و دوباره دکمه سرچ رو فراخوانی می کنه.

این عمل انقدر تکرار میشه(به اندازه تعداد درایوهای کنترل درایو) تا تعداد کل درایوها سرچ شده باشه.

البته نکته ای که باید رعایت کنید اینست که حواستون باشه که برای درایوهایی مثل cd-rom و یا فلش و... برنامه دچار خطا نشه و اگر درایو آماده بود برنامه سرچ کنه و در غیر این صورت بره سراغ درایو بعدی.

xrezax
دوشنبه 29 آبان 1391, 19:08 عصر
میشه ایدیتش کنید

volkswagen
دوشنبه 29 آبان 1391, 20:00 عصر
نیای به تایمر نیست.نوشتم ولی شاید خطا داشته باشه


این رو اضافه کن:


Private Sub Command1_Click()
a_1 = True

If n > Drive1.ListCount Then

MsgBox "search complet"
Exit Sub
Else
If a_1 = True Then
a_1 = False
n = n + 1
Text1.Text = Left(Drive1.List(n), 2)
Call Cmd_Search_Click
End If
End If
End Sub



و همچنین در پایان رویداد Cmd_Search_Click() این رو:

MsgBox "next drive ..."


Call Command1_Click


این متغیرها رو هم در قسمت بالای فرم تعریف کن:

Dim a_1 As Boolean

Dim n As Byte

xrezax
دوشنبه 29 آبان 1391, 20:10 عصر
کار نکرد.
می دونی می خوام چیکار کنم.
مثلاً من یک فایلی دارم بنام 1.txt که نمی دونم کجای هارد ذخیره شده. می خوام برنامه برام پیداش کنه. همین

volkswagen
دوشنبه 29 آبان 1391, 20:19 عصر
کار نکرد.
می دونی می خوام چیکار کنم.
مثلاً من یک فایلی دارم بنام 1.txt که نمی دونم کجای هارد ذخیره شده. می خوام برنامه برام پیداش کنه. همین

می دونم ، ویرایشش کردم ، دوباره تست کن.

xrezax
دوشنبه 29 آبان 1391, 21:11 عصر
بکارم نمیاد این. ضریب اشتباهش خیلی بالاست.
یکمی دقیقتر می خوام باشه

volkswagen
دوشنبه 29 آبان 1391, 21:39 عصر
چرا ضریب اشتباهش بالاست؟! یکم دقیق تر توضیح بدید.

program2vb
سه شنبه 30 آبان 1391, 11:00 صبح
دوستان این پروژه ای که ضمیمه کردم توی text1.text باید خودم درایو براش تعریف کنم تا اون درایو سرچ کنه. من می خوام اتوماتیک تمام هارد را جستجو کنه و دونه دونه درایوهارو سرچ کنه و فایل های خواسته شده را لیست کنه.
ممنون میشم کسی بتونه ایدیتش کنه برام

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

xrezax
سه شنبه 30 آبان 1391, 11:16 صبح
کجاش باید تعریف کنم که چی سرچ کنه ؟
مثلاً بهش بگم reza.txt را برام توی تمام درایوا بگرد ؟؟

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

start scan : *** معلومه

stop scan نداره

program2vb
سه شنبه 30 آبان 1391, 11:53 صبح
کجاش باید تعریف کنم که چی سرچ کنه ؟
مثلاً بهش بگم reza.txt را برام توی تمام درایوا بگرد ؟؟

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

start scan : *** معلومه

stop scan نداره


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

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

میشه اضافه کرد ها بهش ولی کار داره یکم بازم اگه وقت کردم اونم درس میکنم سورس میزارم اینجا خدمتتتون ....

موفق و پیروز باشید در پناه خدا ..... یا علی

xrezax
سه شنبه 30 آبان 1391, 11:57 صبح
توی سرچ فقط اسم فایل نوشته میشه. مثلاً اگر توی درایو D یک تکست باشه بنام text.txt اینجوری می زنه
text.txt من می خوام اینجوری باشه
D:\test.txt

----------------------------------------

تست کردم درایوارو باید دستی بهش بدی. c رو که سرچ کرد ایست می کنه برنامه. (راهی داره درایو c رو بپره برنامه و سرچ کنه /؟؟)

volkswagen
سه شنبه 30 آبان 1391, 13:21 عصر
با اجازه جناب program2vb ، خوب می بایست که این خط رو: (موجود در تابع FindFile)

List1.AddItem tFil.Name

به این تبدیل کنی:
List1.AddItem fso.BuildPath(fld.Path, tFil.Name)

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

xrezax
سه شنبه 30 آبان 1391, 13:29 عصر
تست کردم درایوارو باید دستی بهش بدی. میشه کاری کرد هر درایوی که تموم بشه بره سراغ بعدی

SlowCode
سه شنبه 30 آبان 1391, 13:35 عصر
سلام
من پستهای قبلی رو نخوندم ولی میتونی توی یه حلقه از 65 تا 90 با تابع GetDriveType ببین اگه مقدارش برگشتیتش 1 نباشه یعنی اگه وجود داشته باشه کارت رو نجام بده. این مثال رو ببین:

Private Declare Function GetDriveType Lib "kernel32.dll" Alias "GetDriveTypeA" (ByVal nDrive As String) As Long

Dim Drive As String, DType As Byte
For i = 65 To 90
Drive = Chr(i) & ":"
DType = GetDriveType(Drive)
If DType <> 1 Then List1.AddItem Drive & " " & "Type: " & DType
Next

xrezax
سه شنبه 30 آبان 1391, 13:40 عصر
مرسی از کمکت امام میخوام با مثالهای قبلی سازگاری داشته باشه. نمیتونم از صفر شروع کنم

SlowCode
سه شنبه 30 آبان 1391, 13:55 عصر
خب پس کد داخل دکمه Command1 رو بین این حلقه بنویس:

For i = 0 To List2.ListCount - 1
List1.AddItem "***" & List2.List(i) & "start scan : *** "
FindFile List2.List(i), txtExt
Next

البته خودم امتحانش نکردم. اگه جواب نداد بگو

program2vb
سه شنبه 30 آبان 1391, 14:17 عصر
سلام به همگی دوستان و خسته نباشید به همگی

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

سوالی چیزی داشتین من در خدمتم

موفق و پیروز باشید در پناه خدا ...... یا علی

xrezax
چهارشنبه 01 آذر 1391, 21:50 عصر
نمیشه سرعتشو برد بالا

program2vb
پنج شنبه 02 آذر 1391, 08:37 صبح
نمیشه سرعتشو برد بالا

سلام به شما دوست عزیز

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

موفق و پیروز باشید در پناه حق ...... یا علی

xrezax
جمعه 03 آذر 1391, 00:13 صبح
بعد نمیشه یه کاری کرد براش تعریف کرد هر جا اسم فایل توش reza بکار رفته باشه رو پیدا کنه؟؟
مثلاً اینجوری

rezakjhkj
kljkljrezalkjlk
reza876
23238rezajkkl

program2vb
جمعه 03 آذر 1391, 13:21 عصر
سلام به شما دوست عزیز

چرا میشه اینکارو کرد

فقط یکم سرعت برنامه میاد پایین

موفق و پیروز باشید در پناه خدا

یا علی

xrezax
شنبه 04 آذر 1391, 09:02 صبح
میشه بگید کجاشو باید تغییر داد؟

volkswagen
یک شنبه 05 آذر 1391, 19:16 عصر
سلام
باید فایل ها یکی یکی برای اینکار باز بشند(دستور open) که همونطوری که گفتند سرعت میاد پایین.
برنامه search خود ویندوز هم فکر کنم از یکسری الگوریتم های خاصی استفاده کرده چون سریع اینکارو می کنه والا در حالت عادی که شما می خوایند انجامش بدید خیلی طول می کشه.

xrezax
یک شنبه 05 آذر 1391, 20:57 عصر
فکر نکنم نیازی به باز کردن فایل باشه ؟؟
با همچین دستوری فکر کنم بشه ؟؟
البته من بلد نیستم ایدیتش کنم


For i = 0 To List1.ListCount - 1
If InStr(1, List1.List(i), "mohsen", vbTextCompare) <> 0 Then List2.AddItem List1.List(i)
Next

program2vb
دوشنبه 06 آذر 1391, 10:22 صبح
فکر نکنم نیازی به باز کردن فایل باشه ؟؟
با همچین دستوری فکر کنم بشه ؟؟
البته من بلد نیستم ایدیتش کنم


با سلام خدمت همگی دوستان عزیز :

نه نیاز به باز کردن فایل هست نه نیاز به حلقه دارین شما

داخل همون حلقه میتونین وسط دو قسمت سبز که داخل فانکشن هست اونجا کدتتون رو با شرط برسی کنید و استفاده کنید من وقت نداشتم زیاد در موردش فک کنم ولی این کد رو یه نگاه بکن

منظورم این قسمت برنامه


'************************************************* ****************
Label1.Caption = "Scan File : " & fso.BuildPath(fld.Path, tFil.Name)
List4.AddItem tFil.Name
List1.AddItem fso.BuildPath(fld.Path, tFil.Name)
ln = InStrRev(tFil.Name, Text1.Text, Len(tFil.Name) - 4)
If ln > 0 Then
If tFil.Name = Text1.Text + "." + txtExt Or Mid(Left(tFil.Name, Len(tFil.Name) - 4), ln, Len(Text1.Text)) = Text1.Text Then
List5.AddItem fso.BuildPath(fld.Path, tFil.Name)
End If
End If
'************************************************* ****************


البته در قسمت جنرال فرم یا میتونین در داخل فانکشن یه متغییر با اسم ln از نوع long تعریف کنید ......

برای برسی رشته از کد زیر استفاده میکنیم


ln = InStrRev(tFil.Name, Text1.Text, Len(tFil.Name) - 4)


این -4 که در بالا گذاشتم منظورم این بود که اون .txt یعنی پسوند فایل رو برداره و بغیر اون رو جستجو کنه .

و قسمت بعدی کد نشون دادن درست یا غلط هست که داخل شرط مینویسیم


Mid(tFil.Name, ln, Len(Text1.Text)) = Text1.Text


این برسی میکنه درستی یا نادرستی رو که مثلا رضا هست داخل اسم فایل یا نیست اگه باشه مقدار بازگشتی درست true و اگه نباشه مقدار بازگشتی نادرست false خواهد بود

البته فک کنم بنده چون یکم عجله داشتم شاید کدها یخورده اشکال داشته باشه حالا خودتون یکم زحمت بکشین من توضیحاتشو دادم :لبخند:

اینم یکم توضیح در مورد همین موضوع : >>>>>>>

************************************************** **************************
تابع Mid : اين تابعی يک رشته بر می گرداند که شامل تعداد مشخصی از کاراکترهای رشته ورودی آن است .

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


Mid(string, start, length)


string : رشته ورودی .

start : محل شروع اولين کاراکتر رشته ای که می خواهيم از رشته ورودی استخراج کنيم .

Length : اين پارامتر اختياری است و طول رشته ای است که می خواهيم از رشته ورودی استخراج کنيم . اگر اين پارامتر وارد نشود کليه کاراکترها از start به بعد استخراج خواهند شد .

مثال :


Mid("Ghader",3,2)="ad"


تابع Instr : اين تابع محل اولين وقوع يک رشته را درون رشته ديگر نشان می دهد .

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


InStr(start, string1, string2)



Start : اين پارامتر اختياری است و محل شروع جستجو را نشان می دهد . اگر اين پارامتر وارد نشود جستجو از ابتدای رشته آغاز می شود .


String1 : رشته ای که جستجو در آن انجام می شود .


String2 : رشته مورد جستجو

مثال :


ln = InStr(1, "ghader", "ad")


مقدار بازگشتی این اگه اون کلمه باشه براابر محل اولین حرف اون اگه وجود نداشته باشه برابر 0 هست

************************************************** **************************

میتونین کد بالا که نوشتم از اون استفاده کنین

موفق و پیروز باشید در پناه حق

یا علی