نسخ او نقل ملفات من امتداد محدد من جميع المسارات - VB.NET

تم تحميل الصفحة في 1,9041396 ثانية
نسخ او نقل ملفات من امتداد محدد من جميع المسارات - VB.NET
إنضم
23 سبتمبر 2013
المشاركات
176
الإعجابات
212
النقاط
43
الإقامة
Jordan


اللهم لا علم لنا الا ما علمتنا انك انت العليم الحكيم
سلام الله عليكم

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



بداية احنا بحاجة الي عمل فورم بهذا الشكل :



ثم لتفاصيل العمل والاكواد ما عليكم سوي متابعة درس الفيديو



Source Code:
تحميل Move Files zip


هذا كل شيء
 
إنضم
26 ديسمبر 2009
المشاركات
543
الإعجابات
233
النقاط
43
جزاك الله كل الخير اخي الحبيب وكتب لك عظيم الاجر والثواب ورفع درجتك بالجنة يوم القيامة

ممكن اعادة رفع السورس اخي عمركز رفع اخر ؟؟
 
إنضم
26 ديسمبر 2009
المشاركات
543
الإعجابات
233
النقاط
43
اخي ابو فهمي البرنامج ناجح جدا مع مسار محدد

لكن عند البحث في كامل القرص الصلب نفس المشكلة في الموضوع السابق مشكلة الصلاحيات حيث بعض المجلدات تحتاج صلاحيات الادمن

هل من حل لهذه المشكلة بحيث لا يبحث في المجلدات التي تحتاج الصلاحيات ؟؟؟
 
إنضم
26 ديسمبر 2009
المشاركات
543
الإعجابات
233
النقاط
43
اخي ابو فهمي البرنامج ناجح جدا مع مسار محدد

لكن عند البحث في كامل القرص الصلب نفس المشكلة في الموضوع السابق مشكلة الصلاحيات حيث بعض المجلدات تحتاج صلاحيات الادمن

هل من حل لهذه المشكلة بحيث لا يبحث في المجلدات التي تحتاج الصلاحيات ؟؟؟
في حالة المجلدت التي تحتاج صلاحيات المدير مثلا ملفات البرامج في القرص سي تم حل المشكلة

لكن يبقي حل مشكلة ملف
System.UnauthorizedAccessException: 'تم رفض الوصول إلى المسار 'E:\$RECYCLE.BIN\S-1-5-21-2800687128-566568502-1112790091-1000'.'

يخرج من البرنامج اخي الكريم
 
إنضم
23 سبتمبر 2013
المشاركات
176
الإعجابات
212
النقاط
43
الإقامة
Jordan
في حالة المجلدت التي تحتاج صلاحيات المدير مثلا ملفات البرامج في القرص سي تم حل المشكلة

لكن يبقي حل مشكلة ملف
System.UnauthorizedAccessException: 'تم رفض الوصول إلى المسار 'E:\$RECYCLE.BIN\S-1-5-21-2800687128-566568502-1112790091-1000'.'

يخرج من البرنامج اخي الكريم
أهلا وسهلا فيك اخي
أمرها سهل جدا أخي ....
ضع كل الاكواد بالاجراء (MoveFiles) داخل جملة try جديدة وهي كفيلة بوقف الخطأ
وممكن ايضا اضافة استثناء للمجلدين هؤلاء بحيث يصبح الكود بشكل نهائي هكذا :

كود:
    Public Sub MoveFiles(sourceFile As String, Destination As String)
        Try
            Dim AllFiles As String() = Directory.GetFiles(sourceFile, "*.*", SearchOption.AllDirectories)
            For Each MyFile As Object In AllFiles
                If Not MyFile.ToString().Contains("RECYCLE.BIN") Then
                    If Not MyFile.ToString().Contains("System Volume Information") Then
                        Dim mFile As New FileInfo(MyFile)
                        If Not IsRunAsAdmin() Then
                            Try
                                Dim Ext As String = Path.GetExtension(MyFile)
                                If Ext = cmbExtension.Text Then
                                    Dim FName As String = Path.GetFileName(MyFile)
                                    Dim FNameDir = MyFile.ToString().Replace(FName, "")
                                    Dim NewDir = FNameDir.Replace(txtOldDir.Text, "")
                                    Destination = Destination + "\"
                                    If Not NewDir = "\" Then
                                        Destination = txtNewDir.Text + NewDir
                                        If Not Directory.Exists(Destination) Then
                                            Directory.CreateDirectory(Destination)
                                        End If
                                    End If

                                    If Not File.Exists(Destination + FName) Then
                                        File.Move(MyFile.ToString(), Destination + FName)
                                    End If
                                End If

                            Catch ex As UnauthorizedAccessException
                                MessageBox.Show(ex.Message, "File Access Denied", MessageBoxButtons.OK, MessageBoxIcon.[Stop])
                            End Try
                        Else
                            MessageBox.Show("The File: " + mFile.Name + " Need Admin Rules", "Admin Require", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
                        End If
                    End If
                End If
            Next
        Catch ex As Exception
            MessageBox.Show(ex.Message, "File Error", MessageBoxButtons.OK, MessageBoxIcon.[Stop])
        End Try
    End Sub
 
إنضم
26 ديسمبر 2009
المشاركات
543
الإعجابات
233
النقاط
43
أهلا وسهلا فيك اخي
أمرها سهل جدا أخي ....
ضع كل الاكواد بالاجراء (MoveFiles) داخل جملة try جديدة وهي كفيلة بوقف الخطأ
وممكن ايضا اضافة استثناء للمجلدين هؤلاء بحيث يصبح الكود بشكل نهائي هكذا :

كود:
    Public Sub MoveFiles(sourceFile As String, Destination As String)
        Try
            Dim AllFiles As String() = Directory.GetFiles(sourceFile, "*.*", SearchOption.AllDirectories)
            For Each MyFile As Object In AllFiles
                If Not MyFile.ToString().Contains("RECYCLE.BIN") Then
                    If Not MyFile.ToString().Contains("System Volume Information") Then
                        Dim mFile As New FileInfo(MyFile)
                        If Not IsRunAsAdmin() Then
                            Try
                                Dim Ext As String = Path.GetExtension(MyFile)
                                If Ext = cmbExtension.Text Then
                                    Dim FName As String = Path.GetFileName(MyFile)
                                    Dim FNameDir = MyFile.ToString().Replace(FName, "")
                                    Dim NewDir = FNameDir.Replace(txtOldDir.Text, "")
                                    Destination = Destination + "\"
                                    If Not NewDir = "\" Then
                                        Destination = txtNewDir.Text + NewDir
                                        If Not Directory.Exists(Destination) Then
                                            Directory.CreateDirectory(Destination)
                                        End If
                                    End If

                                    If Not File.Exists(Destination + FName) Then
                                        File.Move(MyFile.ToString(), Destination + FName)
                                    End If
                                End If

                            Catch ex As UnauthorizedAccessException
                                MessageBox.Show(ex.Message, "File Access Denied", MessageBoxButtons.OK, MessageBoxIcon.[Stop])
                            End Try
                        Else
                            MessageBox.Show("The File: " + mFile.Name + " Need Admin Rules", "Admin Require", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
                        End If
                    End If
                End If
            Next
        Catch ex As Exception
            MessageBox.Show(ex.Message, "File Error", MessageBoxButtons.OK, MessageBoxIcon.[Stop])
        End Try
    End Sub
جزاك الله كل الخير اخي فقد تعلمت الكثير من الكود في التعامل مع الملفات ولكن بقي كيفة التعامل مع الملفات التي تحتاج صلاحيات

قمت بتعديل الكود ولكن انظر الصورة وظهور المشكلة عند اختيار قرص كامل مثلا e لان العرض الاساسي التعامل مع كافة الملفات في الجهاز ككل لسهولة البحث عن ملف بامتداد محدد

 
إنضم
23 سبتمبر 2013
المشاركات
176
الإعجابات
212
النقاط
43
الإقامة
Jordan
جزاك الله كل الخير اخي فقد تعلمت الكثير من الكود في التعامل مع الملفات ولكن بقي كيفة التعامل مع الملفات التي تحتاج صلاحيات

قمت بتعديل الكود ولكن انظر الصورة وظهور المشكلة عند اختيار قرص كامل مثلا e لان العرض الاساسي التعامل مع كافة الملفات في الجهاز ككل لسهولة البحث عن ملف بامتداد محدد

نعم اخي الكريم كلامك صحيح ...
انا عدلت علي الكود افتراضيا في النوتباد
ولكني عندا فتحت الفيجوال اختلف الوضع معي قليلا ,وهنا لي وقفة معك ونصيحة
كل شيء ممكن عمله ولكن يجب الانتباه دوما للديبوجر فهو من يضع لك الاحطاء وبالتالي ينتج عنه
كيفية تفكيرك لاعادة صياغة هذا الكود طبقا للخطأ

انا وجدت البرنامج يجد خطأ هنا :
كود:
            Dim AllFiles As String() = Directory.GetFiles(sourceFile, "*.*", SearchOption.AllDirectories)
لماذا ؟؟؟؟
لان نحن طالبين من المتغير بان يبحث بهذا الباتيرن : *,*
ومن المعلوم البحث عن ملفات داخل مجلدات السيستم الحساسة (RECYCLE - System Volume Information) ممنوعة وهنا كان الخطأ

للتعديل علينا انشاء بحث Directory منفرد بدون ملفات حتي نستطيع وضع جملتنا الشرطية عليه
لذا راح يكون شكل الاجراء النهائي والمجرب بهذا الشكل :

كود:
 Public Sub MoveFiles(sourceFile As String, Destination As String)
        Try
            Dim dirs As Object() = Directory.GetDirectories(sourceFile)
            For Each dir As Object In dirs
                If Not dir.ToString().Contains("RECYCLE.BIN") Then
                    If Not dir.ToString().Contains("System Volume Information") Then
                        Dim AllFiles As String() = Directory.GetFiles(dir, "*.*", SearchOption.AllDirectories)
                        For Each MyFile As Object In AllFiles
                            If Not MyFile.ToString().Contains("RECYCLE.BIN") Then
                                If Not MyFile.ToString().Contains("System Volume Information") Then
                                    Dim mFile As New FileInfo(MyFile)
                                    If Not IsRunAsAdmin() Then
                                        Try
                                            Dim Ext As String = Path.GetExtension(MyFile)
                                            If Ext = cmbExtension.Text Then
                                                Dim FName As String = Path.GetFileName(MyFile)
                                                Dim FNameDir = MyFile.ToString().Replace(FName, "")
                                                Dim NewDir = FNameDir.Replace(txtOldDir.Text, "")
                                                Destination = Destination + "\"
                                                If Not NewDir = "\" Then
                                                    Destination = txtNewDir.Text + "\" + NewDir
                                                    If Not Directory.Exists(Destination) Then
                                                        Directory.CreateDirectory(Destination)
                                                    End If
                                                End If

                                                If Not File.Exists(Destination + FName) Then
                                                    File.Move(MyFile.ToString(), Destination + FName)
                                                End If
                                            End If

                                        Catch ex As UnauthorizedAccessException
                                            MessageBox.Show(ex.Message, "File Access Denied", MessageBoxButtons.OK, MessageBoxIcon.[Stop])
                                        End Try
                                    Else
                                        MessageBox.Show("The File: " + mFile.Name + " Need Admin Rules", "Admin Require", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
                                    End If
                                End If
                            End If
                        Next
                    End If
                End If
            Next
        Catch ex As UnauthorizedAccessException
            MessageBox.Show(ex.Message)
        Catch ex As PathTooLongException
            MessageBox.Show(ex.Message)
        End Try
    End Sub
وفي المستقبل ممكن تستثني مجلدات اخي بحسب حاجتك لها
بالتوفيق
 
إنضم
23 سبتمبر 2013
المشاركات
176
الإعجابات
212
النقاط
43
الإقامة
Jordan
جزاك الله كل الخير اخي فقد تعلمت الكثير من الكود في التعامل مع الملفات ولكن بقي كيفة التعامل مع الملفات التي تحتاج صلاحيات

قمت بتعديل الكود ولكن انظر الصورة وظهور المشكلة عند اختيار قرص كامل مثلا e لان العرض الاساسي التعامل مع كافة الملفات في الجهاز ككل لسهولة البحث عن ملف بامتداد محدد

نعم اخي الكريم كلامك صحيح ...
انا عدلت علي الكود افتراضيا في النوتباد
ولكني عندا فتحت الفيجوال اختلف الوضع معي قليلا ,وهنا لي وقفة معك ونصيحة
كل شيء ممكن عمله ولكن يجب الانتباه دوما للديبوجر فهو من يضع لك الاحطاء وبالتالي ينتج عنه
كيفية تفكيرك لاعادة صياغة هذا الكود طبقا للخطأ

انا وجدت البرنامج يجد خطأ هنا :
كود:
            Dim AllFiles As String() = Directory.GetFiles(sourceFile, "*.*", SearchOption.AllDirectories)
لماذا ؟؟؟؟
لان نحن طالبين من المتغير بان يبحث بهذا الباتيرن : *,*
ومن المعلوم البحث عن ملفات داخل مجلدات السيستم الحساسة (RECYCLE - System Volume Information) ممنوعة وهنا كان الخطأ

للتعديل علينا انشاء بحث Directory منفرد بدون ملفات حتي نستطيع وضع جملتنا الشرطية عليه
لذا راح يكون شكل الاجراء النهائي والمجرب بهذا الشكل :

كود:
 Public Sub MoveFiles(sourceFile As String, Destination As String)
        Try
            Dim dirs As Object() = Directory.GetDirectories(sourceFile)
            For Each dir As Object In dirs
                If Not dir.ToString().Contains("RECYCLE.BIN") Then
                    If Not dir.ToString().Contains("System Volume Information") Then
                        Dim AllFiles As String() = Directory.GetFiles(dir, "*.*", SearchOption.AllDirectories)
                        For Each MyFile As Object In AllFiles
                            If Not MyFile.ToString().Contains("RECYCLE.BIN") Then
                                If Not MyFile.ToString().Contains("System Volume Information") Then
                                    Dim mFile As New FileInfo(MyFile)
                                    If Not IsRunAsAdmin() Then
                                        Try
                                            Dim Ext As String = Path.GetExtension(MyFile)
                                            If Ext = cmbExtension.Text Then
                                                Dim FName As String = Path.GetFileName(MyFile)
                                                Dim FNameDir = MyFile.ToString().Replace(FName, "")
                                                Dim NewDir = FNameDir.Replace(txtOldDir.Text, "")
                                                Destination = Destination + "\"
                                                If Not NewDir = "\" Then
                                                    Destination = txtNewDir.Text + "\" + NewDir
                                                    If Not Directory.Exists(Destination) Then
                                                        Directory.CreateDirectory(Destination)
                                                    End If
                                                End If

                                                If Not File.Exists(Destination + FName) Then
                                                    File.Move(MyFile.ToString(), Destination + FName)
                                                End If
                                            End If

                                        Catch ex As UnauthorizedAccessException
                                            MessageBox.Show(ex.Message, "File Access Denied", MessageBoxButtons.OK, MessageBoxIcon.[Stop])
                                        End Try
                                    Else
                                        MessageBox.Show("The File: " + mFile.Name + " Need Admin Rules", "Admin Require", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
                                    End If
                                End If
                            End If
                        Next
                    End If
                End If
            Next
        Catch ex As UnauthorizedAccessException
            MessageBox.Show(ex.Message)
        Catch ex As PathTooLongException
            MessageBox.Show(ex.Message)
        End Try
    End Sub
وفي المستقبل ممكن تستثني مجلدات اخي بحسب حاجتك لها
بالتوفيق
 
إنضم
26 ديسمبر 2009
المشاركات
543
الإعجابات
233
النقاط
43
اخي ابو فهمي جزاك الله كل الخير وزادك من علمه

هل يمكن جعله يقوم بعملية النسخ من جميع الهارد

مثلا الان جهازي يحتوي على القرص (c-d)

ربما جهاز اخر يحتوي علي (c-e)

هل يمكننا جعله يتعرف علي الاقراص ويبدا عملية البحث حسب امتداد معين ؟؟؟

انا احاول في الطريقة ولو ممكن تساعدنا وجزاك الله كل الخير ليكون المثال مرجع لكل من يريد ان يتعلم التعامل مع الملفات بدلا من التعقيد في الشروحات الاخري
 
إنضم
23 سبتمبر 2013
المشاركات
176
الإعجابات
212
النقاط
43
الإقامة
Jordan
إنضم
23 سبتمبر 2013
المشاركات
176
الإعجابات
212
النقاط
43
الإقامة
Jordan
اخي ابو فهمي جزاك الله كل الخير وزادك من علمه

هل يمكن جعله يقوم بعملية النسخ من جميع الهارد

مثلا الان جهازي يحتوي على القرص (c-d)

ربما جهاز اخر يحتوي علي (c-e)

هل يمكننا جعله يتعرف علي الاقراص ويبدا عملية البحث حسب امتداد معين ؟؟؟

انا احاول في الطريقة ولو ممكن تساعدنا وجزاك الله كل الخير ليكون المثال مرجع لكل من يريد ان يتعلم التعامل مع الملفات بدلا من التعقيد في الشروحات الاخري
امرها بسيط اخي فقط نستعمل كلاس DriveInfo
لذا تاكد من اختيارك لمسار الحفظ والامتداد ثم انشأ زر مثلا : Move All
دبل كلك علي هذا الزر واستدعي فيه هذا الاجراء

كود:
    Private Sub CopyComputer()
        ' Where(Function(x) x.IsReady = True) = للتاكد بان القرص هذا جاهز للعمل
        For Each driveRoot As DriveInfo In DriveInfo.GetDrives().Where(Function(x) x.IsReady = True)
            ' System.IO.DriveType.Fixed = البارتيشن علي الهارد ديسك الرئيسي
            ' System.IO.DriveType.Removable = الفلاشات
            If driveRoot.DriveType = System.IO.DriveType.Fixed Or driveRoot.DriveType = System.IO.DriveType.Removable Then
                MoveFiles(driveRoot.Name, txtNewDir.Text)
            End If
        Next
    End Sub

وطبعا للتنبيه يجب عليك استثناء مجلدات عديدة بقرص تشغيل النظام
 
إنضم
26 ديسمبر 2009
المشاركات
543
الإعجابات
233
النقاط
43
جزاك الله كل الخير اخي ابو فهمي وزادك من علمه

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

يبقي فقط لو ترفق السورس كود في اليوتيوب حتي يستفيد الزائر من الدرس لو شاهده من خلال اليوتيوب

الكثير يبحث عن الامر وربما ارفاق السورس يفيد الكثير من طلبة العلم -
 
إنضم
23 سبتمبر 2013
المشاركات
176
الإعجابات
212
النقاط
43
الإقامة
Jordan
جزاك الله كل الخير اخي ابو فهمي وزادك من علمه

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

يبقي فقط لو ترفق السورس كود في اليوتيوب حتي يستفيد الزائر من الدرس لو شاهده من خلال اليوتيوب

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

ابو روضة

.:: إداري النقطة العامة ::.
rankrankrankrankrankrank
إنضم
28 أكتوبر 2012
المشاركات
3,342
الإعجابات
3,538
النقاط
163
الإقامة
القاهرة
تسلم ايديك اخي @Abufahmi يوم عن يوم تزداد منزلتك علواً عندي
الله يجزيك خير و يزيدك علم و رفعة
جزاك الله كل الخير أخى وحبيبى أبو فهمى مبدع من يومك والله....
يا أخى __classic أبو فهمى اسطورة من أساطير البرمجة وهذه حقيقة ليست محاملة.
فمن لا يعرفه جيداً سيتعجب من أول وهلة من لمساته الفنية فى البرمجة ولسان حالة يُردد ماشاء الله عليك.
 
إنضم
23 سبتمبر 2013
المشاركات
176
الإعجابات
212
النقاط
43
الإقامة
Jordan
جزاك الله كل الخير أخى وحبيبى أبو فهمى مبدع من يومك والله....
يا أخى __classic أبو فهمى اسطورة من أساطير البرمجة وهذه حقيقة ليست محاملة.
فمن لا يعرفه جيداً سيتعجب من أول وهلة من لمساته الفنية فى البرمجة ولسان حالة يُردد ماشاء الله عليك.
شهادة اعتز فيها من شخص اعتز فيه من كل قلبي
ألف شكر لكلامك الطيب اخي الحبيب ابو روضة
 
إنضم
28 ديسمبر 2018
المشاركات
58
الإعجابات
25
النقاط
8
العمر
22
جزاك الله خيرا لاكن أخي نتمني الفيديو القادم صوت أوضح وكتاابة الكود لايف وشكراً لك <3
 

الأعضاء النشطين حاليآ الذين يشاهدون هذا الموضوع (1 عضو و 1 ضيف)

خيارات الاستايل

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

إرجاع خيارات الإستايل