تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
لايمكن الوصول للملف لأنه قيد الاستخدام بواسطة عملية أخرى
#1
السلام عليكم ورحمة الله وبركاته
( آسف لأن تكرر في المنتدى قبل هذه المرة لكن لم أجد الحل )
لدي ملف يوجد به ملف 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("         تم الحفظ بنجاح       ")


الملفات المرفقة صورة/صور
   
الرد }}}
تم الشكر بواسطة:
#2
من الصورة التي أرفقتها، المشكلة تتعلق بخطأ من النوع
كود :
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()
الرد }}}
تم الشكر بواسطة: صالح عبدالله , Zuhare , Zuhare , Zuhare
#3
السلام عليكم ورحمة الله وبركاته

الشكر الجزيل لك الأخ aljzazy  جاري تجربة الكود وهو ناجح إلى الآن بارك الله فيك وجعله في موازين حسناتك
الرد }}}
تم الشكر بواسطة:
#4
الشكر الجزيل لك استاذي العزيز تم تجربة الكود بأكثر من طريقة ويعمل معي بأفضل مايكون وتعجز الكلمات عن شكرك بارك الله فيك
الرد }}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  [سؤال] منع الوصول أو تشغيل الريجيسترى dr.programming 4 398 12-06-25, 12:24 AM
آخر رد: أبو خالد الشكري
Photo لايمكن تعرف على تنسيق قاعدة البيانات الدريساوي 2 697 26-04-25, 12:24 AM
آخر رد: الدريساوي
  إغلاق ملف pdf بواسطة الكود صالح عبدالله 5 476 21-12-24, 02:49 PM
آخر رد: aljzazy
  أسرع طريقة يمكن بها نقل جدول Table من قاعدة بيانات على النت إلى أخرى محلية mmaalmesry 2 592 19-10-24, 09:26 PM
آخر رد: mmaalmesry
  المساعدة في عملية طرح الوقت من خلال اثنين textbox جيولوجي مبتدئ 9 2,758 06-08-24, 07:43 PM
آخر رد: خالد كامل1
  [سؤال] الطباعة من وورد بواسطة فيجوال بيسك AnasAlhussain 5 2,393 16-05-24, 06:10 PM
آخر رد: amzahrano
  سؤال عن عملية حذف سجل من قاعدة البيانات assuhimi 3 800 11-02-24, 08:43 PM
آخر رد: assuhimi
Heart [C#.NET] حول بطئ عملية نقل البينات الكثيرة من أكسس إلى داتا غريد فيو بلال بلال 11 1,502 15-12-23, 07:47 AM
آخر رد: foad8920
  [VB.NET] ناتج عملية الطرح للأرقام الشعرية خطا عبدالله الصافي 3 669 27-09-23, 11:01 AM
آخر رد: قناص المدينة
  عملية حسابية خاصة محمد خيري 6 846 22-08-23, 09:09 AM
آخر رد: مصمم هاوي

التنقل السريع :


يقوم بقرائة الموضوع: