الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيف أرجع الملفات في مجلد بأكثر من امتداد

بدأه Abboodd في 28 مارس 2009 · 8 رد · 738 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

إخواني، كيف أعيد كافة الملفات في مجلد معين، وبمجموعة من المتدادات، مثلاً:

مجلد فيه الملفات التالية:

MyText.txt

MyBitmap.bmp

MyJPEG.jpg

MyDocument.doc

MyGIF.gif

أريد طريقة أحصل فيها على الملفات ذات الامتداد الصوري فقط، يعني ستكون النتيجة:

MyBitmap.bmp

MyJPEG.jpg

MyGIF.gif

جربت صنع دالة كالتالي، لكنها نجحت عندما أضع امتداداً واحداً، لكنها لم تنجح مع أكثر من امتداد:

Public Function FindPicturesInFolder(ByVal Directory As String, ByVal Extension As String) As String()

	Dim TmpString As String
	Dim Files() As String
	Dim Count As Long

	If Extension = "All Picture Files" Then Extension = ".bmp;*.jpg;*.jpe;*.jpeg;*.tiff;*.png"

	TmpString = Dir$(Directory & "*" & Extension)

	Do While Len(TmpString)
		ReDim Preserve Files(Count) As String
		Files(Count) = TmpString
		Count = Count + 1
		TmpString = Dir$()
	Loop

	FindPicturesInFolder = Files

End Function

أرجو الإفادة إخواني.

بالنسبة لموضوع أكثر المشاكل شيوعاً، فسوف يتم إكماله بإذن الله، لكن ضغط كبيراً ومفاجئاً أتاني، يعني لمدة أسبوعين تقريباً، فاعذروني.

والسلام عليكم ورحمة الله

هذه الجملة خاطئة  :wacko: 


#2

اخي اذا كنت تستخدم اداة filelistBox فيمكنك مباشرة استخدام الخاصية Pattern وضع بها الامتدادات مفصولة بالفاصلة المنقوطة كالتالي

*.jpg;*.bmp;*.gif

اما اذا كنت تستخدم commandialog قم باستخدام الخاصية Filter

حسب التالي

All Picture Files|*.bmp;*.jpg;*.gif;*.wmf|BMB | *.bmp | JPEG | *.jpeg;*.jpg|

تحياتي

تم تعديل هذه المشاركة بواسطة omani في 28 مارس 2009 في 20:13

OMANI FOR EVER

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

post-12787-12780191801974.jpg

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

#3

جرب التالي :

  1. Public Function FindPicturesInFolder(ByVal Directory As String, ByVal Extension As String) As S
    tring()
  2.  
  3. Dim TmpString As String
  4. Dim Files() As String
  5. Dim Count As Long
  6.  
  7. If Extension = "All Picture Files" Then Extension = "*.bmp;*.jpg;*.jpe;*.jpeg;*.tiff;*.png"
  8.  
  9. Dim extCount As Integer
  10. Dim ext() As String
  11. ext = Split(Extension, ";")
  12.  
  13. For extCount = 0 To UBound(ext)
  14. TmpString = Dir$(Directory & ext(extCount))
  15.  
  16. Do While Len(TmpString)
  17. ReDim Preserve Files(Count) As String
  18. Files(Count) = TmpString
  19. Count = Count + 1
  20. TmpString = Dir$()
  21. Loop
  22. Next extCount
  23. FindPicturesInFolder = Files
  24.  
  25. End Function
  26.  
  27.  

:)

تم تعديل هذه المشاركة بواسطة المبرمج أحمد في 28 مارس 2009 في 20:44

سبحان الله وبحمده ... سبحان الله العظيم

#4

جميل ومتميز يا أستاذ أحمد كعادتك، بعد أن وضعت السؤال وجدت طريقة أخرى، وهي أن تحصل على كل الملفات الموجودة في المجلد، ثم تصفيها، يعني تخلف درجة أولى، وإعادة اختراع للعجلة :)

أما هذه الطريقة فهي أفضل بكثير، جزاك الله خيراً كثيراً :)

وشكراً لك أخ عماني على إجابتك :)

بقي سؤال صغير، ما معنى هذا:

If TMPStr <> "." And TMPStr <> ".." Then

ما معنى النقطة، والنقطتين؟؟؟

جزاكم الله خيراً :)

هذه الجملة خاطئة  :wacko: 


#5
Abboodd كتب:
جميل ومتميز يا أستاذ أحمد كعادتك، بعد أن وضعت السؤال وجدت طريقة أخرى، وهي أن تحصل على كل الملفات الموجودة في المجلد، ثم تصفيها، يعني تخلف درجة أولى، وإعادة اختراع للعجلة :)

أما هذه الطريقة فهي أفضل بكثير، جزاك الله خيراً كثيراً :)

وشكراً لك أخ عماني على إجابتك :)

بقي سؤال صغير، ما معنى هذا:

If TMPStr <> "." And TMPStr <> ".." Then

ما معنى النقطة، والنقطتين؟؟؟

جزاكم الله خيراً :)

اخي لا ادري من اين اقتبست هذا السطر ... لابد من وجود الكود كاملا لنعرف لما تم عمله هكذا .

عموما هذا السطر للتأكد من ان المتغيير الذي يحمل القيمة المؤقته والذي اسمه TMPStr لا تكون القيمة التي يحملها في هذه اللحظة هي نقطه او نقطتين .. فيما عدا سنبفذ ماهو بداخل بلووك IF

تحياتي

OMANI FOR EVER

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

post-12787-12780191801974.jpg

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

#6

هو كود وجدته في مثال للأخ mrx_Ta7ady وهو كاملاً كالتالي:

  1. Private Sub Form_Load()
  2. Combo1.Clear
  3.  
  4. Dim TMPStr As String
  5.  
  6.  
  7.  
  8. TMPStr = Dir(App.Path & "*o*.doc")
  9.  
  10. Do
  11. If TMPStr <> "." And TMPStr <> ".." Then
  12. Combo1.AddItem TMPStr
  13. End If
  14.  
  15. TMPStr = Dir()
  16. Loop While TMPStr <> ""
  17. End Sub
  18.  
  19.  

فهنا كود للبحث عن الملفات بامتداد Doc ولكني لم أفهم معنى النقطة والنقطتين في هذا السطر، علماً أني رأيتها تستخدم في أمثلة أخرى على مواقع أخرى ولم أفهم تماماً ما المقصود بها:

	   If TMPStr <> "." And TMPStr <> ".." Then

جزاك الله خيراً

تم تعديل هذه المشاركة بواسطة Abboodd في 29 مارس 2009 في 15:12

هذه الجملة خاطئة  :wacko: 


#7

النقطة الواحدة تعني المجلد الحالي ، أما النقطتين فتعني المجلد الأب ( الذي يحتوي المجلد الحالي ) ..

مثال: حاول فتح المسار التالي في Windows Explorer :

C:\Windows\..\Program Files

ستجد أنه يفتح المجلد C:\Program Files

الصورة التالية مأخوذة من DOS :

post-28945-1238335933_thumb.gif

على العموم ، حسب علمي فإن الدالة Dir لا تقوم بإعادة هذه النقط مع باقي أسماء الملفات الموجودة في المجلد ..

تم تعديل هذه المشاركة بواسطة المبرمج أحمد في 29 مارس 2009 في 17:18

سبحان الله وبحمده ... سبحان الله العظيم

#8

فعلاً يبدو أنها لا تعيدها إلا في DOS لكنها أثارت ارتباكاً لدي، وظننت أن الكود بدونها ناقص..

جزاك الله خيراً :)

ولا تغب عنا مثل هذه الغيابات الطويلة ;)

وشكراً لك أستاذ عماني :)

هذه الجملة خاطئة  :wacko: 


#9

السلام عليكــم ورحمـة الله وبركاتــه ،،

النقطة والنقطتين يظهرون مع الدالة Dir في حالة ان الحالي هو Folder وليس Drive .. هذا اولا

اما ثانيا فعند تحديد الـ Attributes ووضع احتمال الـ vbDirectory

وثالثا عدم تحديد الإسم .. اي لا نقول مثلا *.log .. يجب ان تكون هكذا مثلا

TMPStr = Dir("C:\Windows\", vbDirectory)

أو

TMPStr = Dir("C:\Windows\*", vbDirectory)

أو

TMPStr = Dir("C:\Windows\*.*", vbDirectory)

ونفس الحال ايضا في الدوس .. الفرق ان الدوس يستخدم الـ vbDirectory بشكل افتراضي .. اي دون تحديد

وفي المثال المذكور كان به اكثر من احتمال للبحث وعليهم Comment على ما اتذكر والله اعلى واعلم

وعلى ما اتذكر ايضا ان احد هذه الاحتمالات او اكثر يرجع بالنقطة والنقطتين

لا اذكر جيدا ولكن كان الافضل للاخ السائل وضعها حتى اذا استخدم الكود سالف الذكر بشكل آخر يعمل معه بنجاح

ولكل مقام مقال يا اخ عبود .. ففي حالتنا هذه فقط يكفي التوضيح كما هو في المشاركات اعلاه من الاخوة الافاضل

وبالتوفيق ان شاء الله

اعتذر عن عدم تمكني للمتابعه الدورية في وقتنا الحالي

فليقبل الجميع تقديري واحترامي .. ولكم تحياتي

مواضيع مشابهة