View Full Version : خطا در زیپ نمودن فایل اکسسی که در حال استفاده هست (XceedZip)
ali190
جمعه 02 دی 1390, 12:08 عصر
باسلام و عرض خسته نباشید
من زمانیکه میخوام فایلهایی که ساختار دیتابیس دارند (مثل Access ، Msp ، AutoCad و...) و نیز در حال استفاده هستند (Open هستند) رو توسط کامپوننت XceedZip زیپ کنم ، فایل زیپ شده ای که در مقصد تولید میشه پوچ هست و در فایل زیپ شده مقصد هیچ اثری از فایل مبداء وجود ندارد(همون فایل اکسس)
امتحان کنید:
شما یک فایل اکسس رو ابتدا اجراء کنید ، سپس با استفاده از WinRar اقدام به زیپ کردن فایل کنید ، مشاهده میکنید که با خطای زیر مواجه میشوید:
The process cannot access the file because it is being used by another process
میخوام زمانیکه این اتفاق در XceedZip افتاد عملیات زیپ شدن قطع و به همراه یک پیغام ارور به اطلاع کاربر رسانده شود.
Dim ResultCode As xcdError
If ResultCode1 = "Define Error Code" Then MsgBox "err": XceedZip1.Abort = True
ممنون میشم راهنماییم کنید
یاعلی
M.T.P
جمعه 02 دی 1390, 12:37 عصر
میشه یک کپی از بانک گرفت بعد زیپ کرد.
ali190
جمعه 02 دی 1390, 13:11 عصر
سلام
بنا به دلایلی این کار نمیشه:
1- کل عملیات زیپ شدن توسط پروسزبار در برنامه داره نمایش داده میشه
2-فکر مکینم یه همچین کامپوننتی باید توانایی تشخیص یک همچنین خطایی رو داشته باشه ، مثل نرم ازفزار Winrar .
در ضمن هنگامیکه فایلی مثل اکسس در حال اجراست نمیشه توسط دستور FileCopy ازش کپی گرفت
و ...
محسن واژدی
جمعه 02 دی 1390, 15:48 عصر
سلام
با کدی مشابه زیر هم میتوانیم پیش از فشرده سازی بررسی کنیم که آیا فایل در حال استفاده است یا خیر:
Option Explicit
Function FileIsOpen(sFileName$) As Boolean
Dim iFNum%
On Error Resume Next
iFNum% = FreeFile()
Open sFileName$ For Input Lock Read As #iFNum%
Close iFNum%
If Err.Number = 70 Then
FileIsOpen = True
End If
End Function
Private Sub Command1_Click()
If FileIsOpen("m:\db1.mdb") Then
MsgBox "The process cannot access the file because it is being used by another process", vbCritical, "Error"
End If
End Sub
موفق باشید
M.T.P
جمعه 02 دی 1390, 16:36 عصر
در ضمن هنگامیکه فایلی مثل اکسس در حال اجراست نمیشه توسط دستور FileCopy ازش کپی گرفت
این کار امکان پذیره ، سیستم بکاپ گیری نرم افزار ها با بانک اکسس از همین روش هست.
منتها به شرطی که از Doevent در برنامه استفاده نکرده نباشید ، این کار باعث میشه وقتی نرم افزار در حال کپی کردن بانک هست همزمان یک پروسیجر بانک رو تحت ویرایش قرار بده و برنامه دچار خطا بشه ، البته این موضوع مربوط به بانک های تحت شبکه است که کاربرانی در زمان های نامشخص اطلاعاتی رو از بانک درخواست می کنند.
البته عکس این موضوع هم ممکنه اتفاق بیفته ، یعنی اینکه یه پروسیجر در حال ویرایش بانک هست و شما دستور کپی رو ارسال کنید و عملیات کپی نا موفق باشه.
در کل اگه از DoEvent استفاده نکرده باشید ، چون دستورات در برنامه به ترتیب اجرا میشن مادامی که کار ویرایش بانک انجام نشده ، کد کپی و یا زیپ شدن بانک انجام نمیشه و مشکلی پیش نمیاد.
ali190
جمعه 02 دی 1390, 17:37 عصر
سلام
فقط یه مشکل
این که با تابع FileIsOpen بازبودن فایل اگر تشخیص داده شد عملیات زیپ نمودن میبایست متوقف گردد ، در حالیست که شما وقتی یک فایل MP3 رو که باز میکنید میتونید در حین اجرا اون رو با Winrar زیپ هم کنید
فکر کنم XceedZip حتماً باید مکانیزمی جهت تشخیص این حالت داشته باشه
یاعلی
M.T.P
جمعه 02 دی 1390, 19:32 عصر
اگه ممکنه کامپوننت Xceedzip رو آپلود کنید.
ali190
جمعه 02 دی 1390, 21:21 عصر
سلام
بفرمائید ، این هم کامپوننت.
vbhamed
یک شنبه 04 دی 1390, 07:39 صبح
سلام
خب شما اصلا چه اصراري داريد كه وقتي بانك در حال استفاده است ازش بكاپ بگيريد
ارتباطتون رو با ديتابيس قطع كنيد، بكاپ بگيريد و دوباره متصل بشيد
ali190
یک شنبه 04 دی 1390, 08:13 صبح
سلام جناب vbhamed
بنده بانک اکسس رو فقط مثال زدم
من برنامه ای نوشتم که کاربرام بتونن باهاش در شبکه کار کنند
محدودیت Type فایل هم نداریم
زمانیکه کاربر بخواد یه فایل از نوع Msp ، اتوکد ، اکسس یا هر فایل دیگه ای که بنظرم ساختار دیتابیس داره رو زیپ کنه ، کامپوننت نمیتونه کارش رو درست انجام بده
فقط میخواستم با خود Xceedzip خطا رو شکار و پیغام و هشدار درستی به کاربرم بدم
"عدم مجوز لازم جهت دسترسی به فایل" Msgbox
ممنون
یاعلی
vbhamed
چهارشنبه 14 دی 1390, 08:44 صبح
سلام
نوع فايل مهم نيست
وقتي در حال استفاده هست و به نوعي قفل شده هيچ برنامه ديگه اي نميتونه با فايل كار كنه
بهتره سعي كنيد اول ارتباط با فايل قطع بشه، بعد ازش كپي بگيريد و كپي رو فشرده كنيد
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.