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

+- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb)
+-- قسم : قسم لغة الفيجوال بيسك VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=182)
+--- قسم : قسم اسئلة VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=183)
+--- الموضوع : لايمكن الوصول للملف لأنه قيد الاستخدام بواسطة عملية أخرى (/showthread.php?tid=50816)



لايمكن الوصول للملف لأنه قيد الاستخدام بواسطة عملية أخرى - صالح عبدالله - 21-12-24

السلام عليكم ورحمة الله وبركاته
( آسف لأن تكرر في المنتدى قبل هذه المرة لكن لم أجد الحل )
لدي ملف يوجد به ملف PDF  يتم حفظ الملف داخل قاعدة بيانات SQL  ثم يتم بعد ذلك حذف المجلد كاملاً بمحتوياته وتتم هذه العملية بشكل جيد ولكن عندما أريد أن أعمل أي عملية أخرى يجب الخروج من البرنامج ثم الدخول له مرة أخرى وإلا سوف تحدث المشكلة الموجودة في الصورة حيث تقول ان الملف قيد الاستخدام من قبل عملية أخرى ( نفس الصورة الموجودة في الأسفل ) وقد استخدمت الكود التالي
 
        Dim sqlq As String = "insert into Documents_Table values(@Personal_Num,@Student_Name,@Mokhalafah_Pdf)"
        Dim sqlcmd As New SqlCommand(sqlq, Sqlcon)
        Dim fs As New FileStream("C:\aa_merge\Save.pdf", FileMode.Open, FileAccess.Read)

        Dim br As New BinaryReader(fs)
        Dim pdf1() As Byte = br.ReadBytes(br.BaseStream.Length)

        sqlcmd.Parameters.Add(New SqlParameter("@Personal_Num", SqlDbType.NVarChar, 15) With {.Value = Form1.TextBox7.Text})
        sqlcmd.Parameters.Add(New SqlParameter("@Student_Name", SqlDbType.NVarChar, 100) With {.Value = Form1.TextBox4.Text})
            sqlcmd.Parameters.Add(New SqlParameter("@Mokhalafah_Pdf", SqlDbType.VarBinary)).Value = pdf1

        Sqlcon.Open()
        sqlcmd.ExecuteNonQuery()
        Sqlcon.Close()
    MsgBox("         تم الحفظ بنجاح       ")



RE: لايمكن الوصول للملف لأنه قيد الاستخدام بواسطة عملية أخرى - aljzazy - 21-12-24

من الصورة التي أرفقتها، المشكلة تتعلق بخطأ من النوع
كود :
IOException
، حيث الرسالة تشير إلى أن الملف "C:\aaa\save.pdf" قيد الاستخدام من قِبل عملية أخرى، وبالتالي لا يمكن الوصول إليه.
سبب المشكلة:
هذا الخطأ يحدث عندما يتم:
  1. ترك الملف مفتوحًا في تطبيق آخر (مثل قارئ PDF أو برنامج آخر).
  2. استخدام الملف نفسه في الكود الخاص بك دون إغلاق الموارد المتعلقة به (مثل
    FileStream
  3. أو
    StreamReader
  4. ).

الحل:
1. تأكد من تحرير الموارد:
إذا كنت تستخدم كائنًا لفتح الملف مثل
كود :
FileStream
أو
كود :
StreamReader
، تأكد من أنك تغلقه بعد الانتهاء.
مثال صحيح:
vb
نسخ الكود
كود :
Using fs As New FileStream("C:\aaa\save.pdf", FileMode.Open, FileAccess.Read)
   ' تنفيذ العمليات على الملف
End Using
استخدام كتلة
كود :
Using
يضمن إغلاق الملف تلقائيًا بعد الانتهاء.

2. التأكد من أن الملف ليس مفتوحًا في برامج أخرى:
  • تحقق مما إذا كان الملف مفتوحًا في أي تطبيق خارجي (مثل Adobe Reader). أغلق أي برامج قد تستخدم الملف.

3. فحص الكود المتعلق بحذف الملف أو المجلد:
إذا كنت تحاول حذف الملف، تأكد من أن أي عملية أخرى عليه قد انتهت.
مثال على حذف ملف بعد التأكد من عدم استخدامه:
vb
نسخ الكود
كود :
Try
   If File.Exists("C:\aaa\save.pdf") Then
       File.Delete("C:\aaa\save.pdf")
   End If
Catch ex As IOException
   MessageBox.Show("الملف قيد الاستخدام من قِبل عملية أخرى.")
End Try

4. إضافة فحص للتأكد من عدم استخدام الملف:
يمكنك التحقق مما إذا كان الملف قيد الاستخدام قبل العمل عليه:
vb
نسخ الكود
كود :
Function IsFileLocked(filePath As String) As Boolean
   Try
       Using fs As New FileStream(filePath, FileMode.Open, FileAccess.ReadWrite, FileShare.None)
           ' إذا نجحت العملية، الملف غير مقفل
       End Using
   Catch ex As IOException
       ' الملف مقفل
       Return True
   End Try
   Return False
End Function
ثم يمكنك استدعاء هذه الدالة قبل استخدام الملف:
vb
نسخ الكود
كود :
If Not IsFileLocked("C:\aaa\save.pdf") Then
   ' تابع العمل على الملف
Else
   MessageBox.Show("الملف قيد الاستخدام، يرجى المحاولة لاحقًا.")
End If

5. استخدام
كود :
GC.Collect
في حالات خاصة (إن لزم):
في بعض الحالات، يمكن أن يساعد تنظيف الموارد غير المُدارة:
vb
نسخ الكود
كود :
GC.Collect()
GC.WaitForPendingFinalizers()



RE: لايمكن الوصول للملف لأنه قيد الاستخدام بواسطة عملية أخرى - صالح عبدالله - 21-12-24

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

الشكر الجزيل لك الأخ aljzazy  جاري تجربة الكود وهو ناجح إلى الآن بارك الله فيك وجعله في موازين حسناتك


RE: لايمكن الوصول للملف لأنه قيد الاستخدام بواسطة عملية أخرى - صالح عبدالله - 24-12-24

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