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

أكواد للتعامل مع الملفات والمجلدات وغيرها

مغلق
بدأه ابوحمود في 3 أكتوبر 2001 · 9 رد · 1,073 مشاهدة · في مراجعة المواضيع
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

— للبحث عن ملف :

Set fs = Application.FileSearch

With fs

.LookIn = "C:My Documents"

.FileName = "DO.*"

If .Execute > 0 Then

MsgBox "There were " & .FoundFiles.Count & _

" file(s) found."

For I = 1 To .FoundFiles.Count

MsgBox .FoundFiles(I)

Next I

Else

MsgBox "There were no files found."

End If

End With

ولإعادة البحث :

With Application.FileSearch

If .Execute() > 0 Then

MsgBox "There were " & .FoundFiles.Count & _

" file(s) found."

For i = 1 To .FoundFiles.Count

MsgBox .FoundFiles(i)

Next i

Else

MsgBox "There were no files found."

End If

End With

ولإعادة البحث مع تحديد معيار أكثر تفصيلاً :

With Application.FileSearch

.NewSearch

.LookIn = "C:My Documents"

.SearchSubFolders = True

.FileName = "Run"

.MatchTextExactly = True

.FileType = msoFileTypeAllFiles

End With

انظر التفصيلات في هذا المثال :

With Application.FileSearch

.NewSearch

.LookIn = "C:My Documents"

.SearchSubFolders = True

.FileName = "run"

.TextOrProperty = "San*"

.MatchAllWordForms = True

.FileType = msoFileTypeAllFiles

If .Execute() > 0 Then

MsgBox "There were " & .FoundFiles.Count & _

" file(s) found."

For I = 1 To .FoundFiles.Count

MsgBox .FoundFiles(i)

Next I

Else

MsgBox "There were no files found."

End If

End With

— لنسخ ملف إلى دليل آخر باستخدام الطريقة CopyFile

Dim fs

Set fs = CreateObject("Scripting.FileSystemObject")

fs.CopyFile "C:My Documentsشهادة.Gif",

"c:My DocumentsMy Pictures", True

True للكتابة فوق نسخة موجودة وFalse للنسخ بدون كتابة ، ويعطي رسالة خطأ إذا وجد نسخة .

— لنسخ ملف باستخدام FileCopy

Dim SourceFile, DestinationFile

SourceFile = "اسم الملف مع القرص والدليل"

DestinationFile = "اسم المحرك والمجلد"

FileCopy SourceFile, DestinationFile

— نسخ محتويات مجلد Folder إلى مجلد آخر باستخدام الطريقة CopyFolder

Dim fs

Set fs = CreateObject("Scripting.FileSystemObject")

fs.CopyFolder "C:My Documentsمجلد جديد"

"c:My Documentsبرامج", True

— لإنشاء مجلد جديد باستخدام الطريقة CreateFolder

Dim fs

Set fs = CreateObject("Scripting.FileSystemObject")

fs.CreateFolder "C:My Documentsمجلد جديد"

● لإنشاء مجلد folder استخدم :

MkDir "اسم المجلد الجديد"

لاحظ إذا لم يكتب اسم محرك الأقراص قبل المجلد فسوف ينشأ المجلد على محرك الأقراص الحالي .

— لحذف ملف باستخدام الطريقة DeleteFile

Set fs = CreateObject("Scripting.FileSystemObject")

fs.DeleteFile "C:My Documentsنسخ من شهادة.gif", True

True لحذف ملف للقراء فقط وFalse لعدم حذفه .

— لحذف مجلد باستخدام الطريقة DeleteFolder

Dim fs

Set fs = CreateObject("Scripting.FileSystemObject")

fs.DeleteFolder "C:My Documentsمجلد جديد", True

True لحذف مجلد للقراء فقط وFalse لعدم حذفه ، لاحظ أنه يحذف المجلد وكل الملفات التي بداخله .

— لحذف مجلد :

Rmdir "اسم المجلد"

لابد أن يكون هذا المجلد خالي من الملفات ليتم حذفه وإلا استخدم Kill لحذف الملفات أولا :

Kill ("اسم القرص والدليل والملف مع اللاحقة")

ولحدف كافة محتويات المجلد استخدم بعد القرص ثم المجلد :

*.*

ولحذف نوع ملفات استخدم النجمة واللاحقة مثال :

*.TXT

— لمعرفة أقراص المحركات الموجودة باستخدام الطريقة DriveExists

Dim fs

Set fs = CreateObject("Scripting.FileSystemObject")

fs.DriveExists("c")

يعيد السطر الأخير True إذا وجد المحرك وFalse إذا لم يجده ، لاحظ أن المحركات القابلة للإزالة يعيد السطر الأخير لها True ولو لم تكن موجودة .

— لمعرفة الملفات الموجودة باستخدام الطريقة FileExists

Dim fs

Set fs = CreateObject("Scripting.FileSystemObject")

MsgBox fs.FileExists("c:my documentsشهادة.gif")

يعيد السطر الأخير True إذا وجد الملف وFalse إذا لم يجده ، لاحظ أنه يجي عليك كتابة المجلد واسم الملف واللاحقة .

— لمعرفة المجلدات الموجودة باستخدام الطريقة FolderExists

Dim fs

Set fs = CreateObject("Scripting.FileSystemObject")

MsgBox fs.FolderExists ("c:my documents")

يعيد السطر الأخير True إذا وجد المجلد وFalse إذا لم يجده ، لاحظ أنه يجي عليك كتابة المحرك واسم المجلد .

لمعرفة محركات الأقراص الموجودة في الحاسب :

Sub ShowDriveList

Dim fs, d, dc, s, n

Set fs = CreateObject("Scripting.FileSystemObject")

Set dc = fs.Drives

For Each d in dc

s = s & d.DriveLetter & " - "

If d.DriveType = 3 Then

n = d.ShareName

Else

n = d.VolumeName ' هذا السطر يظهر اسم محرك الأقراص قد يسبب مشاكل ويفضل تعطيله

End If

s = s & n & vbCrLf

Next

MsgBox s

End Sub

● لإظهار المحركات في قائمة منسدلة ؛ ضع في حدث عند التركيز :

Dim fs, d, dc

Dim الكل As Variant

Dim محركات_الأقراص As String

Set fs = CreateObject("Scripting.FileSystemObject")

Set dc = fs.Drives

For Each d In dc

محركات_الأقراص = d

If IsEmpty(الكل) Then

الكل = محركات_الأقراص & ""

Else

الكل = الكل & ";" & محركات_الأقراص & ""

End If

Next

Me![اسم القائمة المنسدلة].RowSource = الكل

ملاحظة هامة جداً : يجب جعل نوع مصدر الصف للقائمة هي قائمة القيم .

— لإظهار الملفات في دليل

Sub ShowFileList(folderspec)

Dim fs, f, f1, fc, s

Set fs = CreateObject("Scripting.FileSystemObject")

Set f = fs.GetFolder(folderspec)

Set fc = f.Files

For Each f1 in fc

s = s & f1.name

s = s & vbCrLf

Next

MsgBox s

End Sub

ويستدعى من إجراء مع وسيطة اسم المجلد أو القرص ، مثال :

Call ShowFileList("C:My Documents")

- لمعرفة حجم ونوع ملف

Dim fs, f, s

Set fs = CreateObject("Scripting.FileSystemObject")

Set f = fs.GetFile("c:My Documentsdb1.mdb")

s = " اسم الملف هو :" & UCase(f.Name) & " وحجمه : " & "(" & (f.Size) & ")" & " ونوعه : " & f.Type

MsgBox s, vbMsgBoxRight + vbMsgBoxRtlReading, "معلومات ملف"

- لإظهار قائمة بأسماء ملفات الخطوط وليس أسماء الخطوط

Dim fs, f, f1, fc, s

Dim الملفات As String

Dim الكل As Variant

Set fs = CreateObject("Scripting.FileSystemObject")

Set f = fs.GetFolder("C:WINDOWSFONTS")

Set fc = f.Files

For Each f1 In fc

If f1.Type = "ملف خط تروتايب" Then

الملفات = f1.Name

If IsEmpty(الكل) Then

الكل = الملفات

Else

الكل = الكل & ";" & الملفات

End If

End If

Next

List1.RowSource = UCase(الكل)

- لمعرفة حجم ونوع مجلد

Dim fs, f, s

Set fs = CreateObject("Scripting.FileSystemObject")

Set f = fs.GetFolder("c:My Documents")

s = " اسم المجلد هو :" & UCase(f.Name) & " وحجمه : " & "(" & (f.Size) & ")" & " ونوعه : " & f.Type

MsgBox s, vbMsgBoxRight + vbMsgBoxRtlReading, "معلومات مجلد"

- لإعادة اسم ملف من دليل :

Dim fs, f

Set fs = CreateObject("Scripting.FileSystemObject")

MsgBox fs.GetFileName("c:My Documentsdb1.mdb")

يعيد السطر الأخير اسم الملف الموجود بعد اسم المجلد .

ولإعادة المجلد كاملاً استخدم :

MsgBox fs.GetFile("c:My Documentsdb1.mdb")

- لإعادة المجلد بعد المحرك من دليل :

Dim fs, f

Set fs = CreateObject("Scripting.FileSystemObject")

MsgBox fs.GetParentFolderName("c:KPCMSMy Documents")

- لنقل ملف استخدم الطريقة MoveFile

Dim fs, f

Set fs = CreateObject("Scripting.FileSystemObject")

fs.MoveFile "c:My Documentsسوند فورج.htm", "c:My DocumentsMy Htmal"

- نقل مجلد باستخدام MoveFolder

Dim fs, f

Set fs = CreateObject("Scripting.FileSystemObject")

fs.MoveFolder "c:المجلد المطلوب نقله", "c:المجلد الذي سينقل إليه المجد السابق"

- لإظهار قائمة بالمجلدات قم باستدعاء التالي:

Sub ShowFolderList(folderspec)

Dim fs, f, f1, s, sf

Set fs = CreateObject("Scripting.FileSystemObject")

Set f = fs.GetFolder(folderspec)

Set sf = f.SubFolders

For Each f1 In sf

s = s & f1.Name

s = s & vbCrLf

Next

MsgBox s

End Sub

ولجعلها تظهر في قائمة منسدلة :

Dim fs, f, f1, s, sf

Dim الكل As Variant

Dim كل_المجلدات As String

Set fs = CreateObject("Scripting.FileSystemObject")

Set f = fs.GetFolder([قرص])

Set sf = f.SubFolders

For Each f1 In sf

كل_المجلدات = f1.Name

If IsEmpty(الكل) Then

الكل = كل_المجلدات

Else

الكل = الكل & ";" & كل_المجلدات

End If

Next

Me![اسم القائمة المنسدلة].RowSource = الكل

مع وضع وسيطه إما محرك أقراص أو مجلد ، مثال :

Call ShowFolderList("c:")

— لإظهار كافة المجلدات في قرص أو دليل وطباعتها في الدبج :

MyPath = "c:"

MyName = Dir(MyPath, vbDirectory)

Do While MyName <> ""

If MyName <> "." And MyName <> ".." Then

If (GetAttr(MyPath & MyName) And vbDirectory) = vbDirectory Then

Debug.Print MyName

End If

End If

MyName = Dir

Loop

ولإظهارها في قائمة منسدلة :

Dim الكل As Variant

Dim كل_المجلدات As String

MyPath = قرص

كل_المجلدات = Dir([MyPath], vbDirectory)

Do While كل_المجلدات <> ""

If كل_المجلدات <> "." And كل_المجلدات <> ".." Then

If (GetAttr(MyPath & كل_المجلدات) And vbDirectory) = vbDirectory Then

If IsEmpty(الكل) Then

الكل = كل_المجلدات

Else

الكل = الكل & ";" & كل_المجلدات

End If

End If

End If

كل_المجلدات = Dir

Loop

Me![اسم القائمة المنسدلة].RowSource = الكل

— لإظهار أول ملف بخاصية معينة

Dim MyFile

MyFile = Dir("*.TXT", vbHidden)

- لإظهار معلومات عن ملف استدعي الإجراء التالي :

Sub ShowFileAccessInfo(filespec)

Dim fs, f, s

Set fs = CreateObject("Scripting.FileSystemObject")

Set f = fs.GetFile(filespec)

s = UCase(filespec) & vbCrLf

s = s & "تاريخ الإنشاء: " & f.DateCreated & vbCrLf

s = s & "التشغيل الأخير: " & f.DateLastAccessed & vbCrLf

s = s & "التعديل الأخير: " & f.DateLastModified

MsgBox s, 0, "معلومات ملف"

End Sub

مع وضع وسيطه إما محرك أقراص أو مجلد ، مثال :

Call ShowFileAccessInfo("c:My Documentsdo.mdb")

— لتغيير اسم ملف أو مجلد

للملف :

Dim OldName, NewName

OldName = "C:MY Documents1.bmp": NewName = "C:MY Documentsخلفية.bmp"

Name OldName As NewName

للمجلد

Dim OldName, NewName

OldName = "C:MY Documentsمجلد جديد": NewName = "C:MY Documentsاحذفه لو سمحت"

Name OldName As NewName

- لمعرفة نوع المجلد هل هو جذر مجلدات root folder أو مجلد داخل جذر أو مجلد آخر ومستواه

Sub DisplayLevelDepth(pathspec)

Dim fs

Set fs = CreateObject("Scripting.FileSystemObject")

Dim f, n

Set f = fs.GetFolder(pathspec)

If f.IsRootFolder Then

MsgBox "The specified folder is the root folder."

Else

Do Until f.IsRootFolder

Set f = f.ParentFolder

n = n + 1

Loop

MsgBox "The specified folder is nested " & n & " levels deep."

End If

End Sub

ويحتاج إلى تمرير وسيطة اسم المجلد أو القرص .

— لمعرفة حجم القرص الصلب والمتاح منه

Sub ShowSpaceInfo(drvpath)

Dim fs, d, s

Set fs = CreateObject("Scripting.FileSystemObject")

Set d = fs.GetDrive(fs.GetDriveName(fs.GetAbsolutePathName(drvpath)))

s = "Drive " & d.DriveLetter & ":"

s = s & vbCrLf

s = s & "السعة: " & FormatNumber(d.TotalSize / 1024, 0) & " Kbytes"

s = s & vbCrLf

s = s & "المساحة الحرة: " & FormatNumber(d.AvailableSpace / 1024, 0) & " Kbytes"

s = s & vbCrLf

s = s & "المساحة المستخدمة: " & FormatNumber((d.TotalSize - d.AvailableSpace) / 1024, 0) & " Kbytes"

MsgBox s

End Sub

يمكنك استبدال سطر المساحة الحرة بالسطر التالي وهو يؤدي إلى نفس النتيجة :

s = s & "المساحة الحرة: " & FormatNumber(d.FreeSpace / 1024, 0)

#2

جميل ما صنعته يا ابا حمود؟

لقد أعجبتني أكوادك التي ذكرت لكن لدي سؤالان:

1- أريد أن أعرف كيف تم النسخ بنجاح عن طريق أمر FileCopy حيث أني وضعت كود لتنزيل قاعدة بيانات ونجح إلا أن المستخدم لا يعرف هل تم تنزيل الملف أم لا.

2- أريد كذلك صيغة كت شورت الذي عن طريقه يتم إنشاء اختصار لملف معين على سطح المكتب حيث أني في برنامجي وضعت الاختصار على الاسطوانة ثم وضعت لها أمرا يقوم بنسخها لكن المشكلة أنه لو تغير اسم سطح المكتب لم تنجح الطريقة لأني وضعت في الكود ؤ:

c:windowsسطح المكتب.

فإذا كان لدى المستخدم ويندوز غير عربي فإن اسم سطح المكتب ديسك توب مما يعني أنه لا يمكن نسخ الاختصار.

#3

الأخ عاصم

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

الأمر الآخر أيضا ابحث عن المجلد العربي C:Windowsسطح المكتب بأحد الطرق المذكورة في بداية الموضوع فإن لم يجده فابحث عن المجلد الانجليزي C:WindowsDeskTop

ولكن هذه الطريقة لها عيوب منها أن يكون المستخدم قد قام بتغيير اسم مجلد سطح المكتب ، ومنها أن يكون منزل الوندوز على غير C وقد تحتاج هنا إلى دوال API لمعرفة مسار الوندوز ، والطريقة التالية أفضل .

طريقة أخرى باستخدام دوال API :

Option Compare Database

Private Enum SpecialFolderIDs

sfidDESKTOP = &H0 ' سطح المكتب

sfidPROGRAMS = &H2 ' البرامج

sfidPERSONAL = &H5 ' شخصي

sfidFAVORITES = &H6 ' المفضلة

sfidSTARTUP = &H7 ' بدء التشغيل

sfidRECENT = &H8 ' قائمة الملفات المفتوحة حديثا

sfidSENDTO = &H9 ' إرسال إلى

sfidSTARTMENU = &HB ' قائمة بدء التشغيل

sfidDESKTOPDIRECTORY = &H10 ' مجلد سطع المكتب

sfidNETHOOD = &H13

sfidFONTS = &H14 ' الخطوط

sfidTEMPLATES = &H15 ' مؤقت

sfidCOMMON_STARTMENU = &H16

sfidCOMMON_PROGRAMS = &H17

sfidCOMMON_STARTUP = &H18

sfidCOMMON_DESKTOPDIRECTORY = &H19

sfidAPPDATA = &H1A

sfidPRINTHOOD = &H1B

sfidProgramFiles = &H10000

sfidCommonFiles = &H10001

End Enum

Private Declare Function SHGetSpecialFolderLocation Lib "shell32" (ByVal hwndOwner As Long, ByVal nFolder As SpecialFolderIDs, ByRef pIdl As Long) As Long

Private Declare Function SHGetPathFromIDListA Lib "shell32" (ByVal pIdl As Long, ByVal pszPath As String) As Long

Private Const NOERROR = 0

ثم في حدث زر الأمر أو غيره ضع التالي :

Dim sPath As String

Dim IDL As Long

Dim strPath As String

Dim lngPos As Long

' Fill the item id list with the pointer of each folder item, rtns 0 on success

If SHGetSpecialFolderLocation(0, sfidDESKTOP, IDL) = NOERROR Then

sPath = String$(255, 0)

SHGetPathFromIDListA IDL, sPath

lngPos = InStr(sPath, Chr(0))

If lngPos > 0 Then

strPath = Left$(sPath, lngPos - 1)

MsgBox strPath

End If

End If

ستظر رسالة Msgbox بمسار سطح المكتب .

الكود السابق يظهر الكثير من مجلدات الوندوز وأهو أفضل من الطريقة الأولى في اعتقادي .

ولك تحياتي

#4

أبوحمود أسال الله أن يزيدك علماً على علمك لحرصك على مساعدة أخوانك .

وحبذا لو قمت بكتابة الاكواد بطريقة تجعل تظهر على صفحات الانترنت بشكل صحيح ، وهو كما تعلم يكون بكتابة كلمة code بعد وضعها بين قوسين مربعين [] قبل كتابة الكود .

ثم أنك لم تتطرق في هذه الاكواد إلى طريقة فتح الملفات .

وشكراً لك .

#5

الأخ الغريب

ماذكرته صحيح ولكنني لا أعرف الكيفية .

لقد جربت ووضعت

 على أول سطر في الكود ولكن جعل المحاذاة إلى اليمين وجعل كل الأسطر التالية تابعة للكود .

ارجو زيادة التوضيح .

ولك تحياتي

#6

أخي الكبير أبو حمود ما أدري ما المانع من جعل أمثلتك القيمة على شكل ملف Mdb ووضعه مع الشرح حيث أنني عندما أنقل الكود للإستفادة منه غالبا ما أقع بالخطأ و أرجع للكود ثانية وأعدل في الملف الذي أنقل إليه وهكذا ألا ترى أنك لو ساعدت أخوك الصغير بهذا الطلب تكون قد أحسنت فوق إحسانك

#7

الأخ محسن محمد

مشكلة الأكواد هي في طريقة العرض في المنتدى والتي إلى الآن لم أعرف طريقتها .

إذا كان لديك علم بها فزودني به ، وسوف آخذ بنصيحتك قدر الإمكان .

ولك تحياتي

#8

الأخ خضر ترزي

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

ليستفيد منها الجميع .

وشكراً .

#9

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

بالنسبة لجعل قاعدة البيانات في متناول الجميع حسب الطريقة التي أستخدمها وأظن أن الأخ حارث وكثير من الأخوة يستخدمونها

-1- إفتح بريد إليكتروني في موقع أين http://www.ayna.com

-2- بعد أن تحصل على بريد إليكتروني إفتح صفحة بريدك

-3- في يمين الشاشة يوجد كلمة صفحة شخصية إنقر بالماوس عليها

-4- إستعرض ملف قاعدة البيانات من جهازك وحملها في صفحتك

-5- سيكون الملف الذي نقلته إلى صفحتك بمتناول الجميع إذا

وضعت إختصار هكذا

http://mypage.ayna.com/mmhhee/AreaVillage11.zip

إنظر mypage.ayna.com يشير إلى مكان صفحتك

و mmhhee يشير إلى بريدك الإليكتروني

و AreaVillage11.zip يشير إلى إسم الملف الذي نقلته إلى صفحتك

أو إذا أحببت أرسل لي ملف إلى بريدي الإليكتروني على العنوان

mmhhee5@hotmail.com وإن شاء الله سأفتح لك صفحة و أحمل لك المثال و أرسل لك كلمة المرور وطريقة الإستخدام وأنا بالخدمة

طبعا هذا بالإضافة للطريقة التي تعرض الكود بها الآن طبعا هذا سيتيح لك التعليق عند الأمر الذي تريد بحرية فيكون الهدفين قد تحققا طريقة الشرح الحالية وملف جاهز

أشكرك لإستجابتك وزادك الله علما وأنتم دائما فضلكم سابق

#10

الأخ محسن محمد

أشكرك على حرصك وفقك الله لكل خير ولدي بالفعل صفحة وسأحاول العمل بنصيحتك لا حرمك الله الأجر ما استعطت .

ولك تحياتي

هذا الموضوع مغلق.

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…