PDA

View Full Version : سوال: گرفتن تمام زير فولدرهاي يك فولدر



EbiPenMan
یک شنبه 31 شهریور 1387, 23:24 عصر
سلام به همگي
من يه سوال داشتم. مثلا من يه فولدر به آدرس c:\new folder دارم و مي خوام هرچي فولدر توش هست رو بگيرم از داخلي ترين فولدر تا بيروني ترين اون رو ( فقط فولدر ها نه فايل ها)
اگه فقط الگوريتمش رو بگيد ممنون ميشم.

و يه سوال ديگه مي خوام حجم هر فولدر هم رو بگيرم اگه ميشه تابعش رو بگيد.

parsavb
دوشنبه 01 مهر 1387, 08:11 صبح
این کد رو امتحان کن



PrivateSub GlassButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles GlassButton1.Click
ForEach strfolder AsStringInMy.Computer.FileSystem.GetDirectories("c:\")
ListBox.Items.add(strfolder)
Next
EndSub

EbiPenMan
دوشنبه 01 مهر 1387, 15:38 عصر
دوست عزيز ممنونم از شما ولي اين كد رو كه هر مبتدي اي ميدونه. منظورم الگوريتمي بود كه بره و تو هر كدوم از اين فولدر ها فولدر هاي داخلش رو و هم اينطور فولدراي داخل داخلش رو پيدا كنه يعني تمام زير فولدر هاي زير فولدراش. OK

و دوستان پيدا كردن حجم فولدر هم يادتون نره. ممنون .

من چند وقته ويندوز XP SP3 رو نصب كردم و مثل اينكه msdn نم باهاش مشكل داره و باز نمي شه و همش مي خواد آپديت كنه و گرنه جواب سوالام مو به احتمال زياد مي تونستم توش پيدا كنم.

mostafaaa
دوشنبه 01 مهر 1387, 20:26 عصر
این تابع بازگشتی تمام زیر دایرکتوریها رو توی یه Stack ذخیره میکنه .

Function GetSubDirectories(ByVal dirInfo As System.IO.DirectoryInfo) As Stack
For Each Dir As System.IO.DirectoryInfo In dirInfo.GetDirectories()
STK.Push(Dir.FullName)
If Not Dir Is Nothing Then
Dim DI As New System.IO.DirectoryInfo(Dir.FullName)
GetSubDirectories(DI)
End If
Next
Return STK
End Function
برای سایز فولدر ها هم میتونی از تابع بازگشتی زیر استفاده کنی

Public Shared Function FSize(ByVal dirInfo As System.IO.DirectoryInfo) As Long
Dim total As Long = 0
Dim file As System.IO.FileInfo
For Each file In dirInfo.GetFiles()
total += file.Length
Next

Dim dir As System.IO.DirectoryInfo
For Each dir In dirInfo.GetDirectories()
total += FSize(dir)
Next
Return total
End Function
اگه اشکال مشکالی هم داشت ، ببخشید چون عجله ای نوشتمشون.

khz-web1
سه شنبه 02 مهر 1387, 06:49 صبح
این کد رو امتحان کن



PrivateSub GlassButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles GlassButton1.Click
ForEach strfolder AsStringInMy.Computer.FileSystem.GetDirectories("c:\")
ListBox.Items.add(strfolder)
Next
EndSub


این کد ایراد داره ... و ارور میده

EbiPenMan
سه شنبه 02 مهر 1387, 17:44 عصر
نه عزيز من تست كردم كار مي كنه. حتما شما خط اول رو هم نوشتيد ولي دكمه اي با اين نام نگذاشتيد.

EbiPenMan
سه شنبه 02 مهر 1387, 17:49 عصر
این تابع بازگشتی تمام زیر دایرکتوریها رو توی یه Stack ذخیره میکنه .

Function GetSubDirectories(ByVal dirInfo As System.IO.DirectoryInfo) As Stack
For Each Dir As System.IO.DirectoryInfo In dirInfo.GetDirectories()
STK.Push(Dir.FullName)
If Not Dir Is Nothing Then
Dim DI As New System.IO.DirectoryInfo(Dir.FullName)
GetSubDirectories(DI)
End If
Next
Return STK
End Function
برای سایز فولدر ها هم میتونی از تابع بازگشتی زیر استفاده کنی

Public Shared Function FSize(ByVal dirInfo As System.IO.DirectoryInfo) As Long
Dim total As Long = 0
Dim file As System.IO.FileInfo
For Each file In dirInfo.GetFiles()
total += file.Length
Next

Dim dir As System.IO.DirectoryInfo
For Each dir In dirInfo.GetDirectories()
total += FSize(dir)
Next
Return total
End Function
اگه اشکال مشکالی هم داشت ، ببخشید چون عجله ای نوشتمشون.


ممنون از شما دوست عزيز .
يه سوال داشتم من هنوز تستش نكردم مي خواستم بدونم كه آيا در اين موقع برنامه دچار هنگ نمي شه يا ميشه يا برنامه در حال جستجو هم كار كرد آخه من يه نوع تابع بازگشتي ديدم براي جستجوي هم فايل ها و هم فولدر ها ولي در موقع جستجو برنامه هنگ مي كرد.( هنگ نه ها. يعني با برنامه ديگه نمي شد تا پايان جستجو كاري كرد)

mostafaaa
سه شنبه 02 مهر 1387, 18:39 عصر
يه سوال داشتم من هنوز تستش نكردم مي خواستم بدونم كه آيا در اين موقع برنامه دچار هنگ نمي شه يا ميشهمن تستش کردم مشکلی نداشت.

mostafaaa
سه شنبه 02 مهر 1387, 20:37 عصر
البته از این متد هم میتونی استفاده کنی.
فکر کنم این از قبلی بهتره ، ولی در کل نتیجه هر دو یکیه.

Function GetAllDirectories(ByVal Dir As IO.DirectoryInfo) As IO.DirectoryInfo()
Dim arr() As IO.DirectoryInfo = Dir.GetDirectories("*.*", IO.SearchOption.AllDirectories)
Return arr
End Function

EbiPenMan
پنج شنبه 04 مهر 1387, 10:15 صبح
از همه ممنونم مشكلم با كمك شما دوستان حل شد.

اگه شد و برنامم زود تموم شد مي زارم (هنوز خيلي باگ داره) اينجا تا از نظرات دوستان برنامه رو بهتر كنم.( يه برنامه براي ليست كردن اتوماتيك برنامه هاي داخل يك سي دي يا هارد)

http://i34.tinypic.com/1zoyl5h.jpg


http://i38.tinypic.com/jjvkeq.jpg