PDA

View Full Version : تشخیص باز بودن یک فایل



ASedJavad
دوشنبه 01 خرداد 1391, 17:28 عصر
سلام

راهی هست بشه تشخیص داد یک فایل (در حال حاضر برام فایلای صوتی مهمن (مثل mp3 یا wav یا wma یا ...)) توسط نرم افزار دیگه ای به صورت نوشتنی باز شده یا نه؟
توضیحات تکمیلی: برنامم قراره یه فولدر رو تحت نظر بگیره و هر وقت توش فایل صوتی ریخته شد، اونو کپی کنه به یه مسیر دیگه.
حالا میخوام اگه اون فایل صوتی (تو فولدر تحت نظر گرفته شده) مثلا در حال رکورد بود، یا مثلا داشت از جای دیگه کپی میشد تو اون فولدر، برنامم دست نگه داره تا اون فایل کامل شه؛ بعد اونو کپی کنه

arenaw
دوشنبه 01 خرداد 1391, 23:42 عصر
سلام
میتونی حجم اون فایل رو زیر نظر بگیری (اگه کم یا زیاد بشه مثلا تو هر x ثانیه یعنی فایل بازه)
البته اینی که گفتم شاید خیلی درست نباشه چون ممکنه یه فایلی با سرعت خیـــلی کمی (بیشتر از اون x ثانیه که شما در نظر گرفتی) در حال نوشته شدن باشه
به هر حال راهی بود بود که به ذهنم رسید

محسن واژدی
سه شنبه 02 خرداد 1391, 10:22 صبح
سلام علیکم
کد زیر هم بررسی کنید:
Private Sub Form_Load()
Open "c:\windows\explorer.exe" For Input As #1
End Sub


Private Sub Command1_Click()
Dim sFl$
sFl$ = "c:\windows\explorer.exe"
MsgBox "Is """ & sFl$ & """ file in use? : " & IIf(IsFileInUse(sFl$), "Yes", "No")
End Sub



Public Function IsFileInUse(sFile As String) As Boolean
On Error Resume Next
Dim fr%
fr% = FreeFile
Open sFile For Binary Lock Read Write As fr%
Close fr%
IsFileInUse = Err.Number = 55
End Function




موفق باشید

ASedJavad
سه شنبه 02 خرداد 1391, 13:29 عصر
میتونی حجم اون فایل رو زیر نظر بگیری (اگه کم یا زیاد بشه مثلا تو هر x ثانیه یعنی فایل بازه)
ظاهرا ویندوز وقتی میخواد یه فایل رو کپی کنه اول تو مقصد یه فایل به اندازه فایل مبدا میسازه بعد میاد اونو پر میکنه؛ پس روش شما جواب نمیده



کد زیر هم بررسی کنید:

جناب واژدی
کد شما موقع کپی کردن یک فایل جواب نمیده (برا حالات دیگه چکش نکردم)
البته ایده خوبیه که احتمالا بشه روش کار کرد.
رو سیستم من ارور شماره 70 میده. ارور شماره 55 چیه؟

محسن واژدی
سه شنبه 02 خرداد 1391, 14:11 عصر
کد شما موقع کپی کردن یک فایل جواب نمیده (برا حالات دیگه چکش نکردم)
البته ایده خوبیه که احتمالا بشه روش کار کرد.
رو سیستم من ارور شماره 70 میده. ارور شماره 55 چیه؟

سلام
55: File Already Used
70: Permission Denied
Private Sub Command1_Click()
MsgBox Error(55)
End Sub

میتوانیم این شرط را هم به جواب تابع اضافه کنیم، یعنی:

IsFileInUse = Err.Number = 55 Or Err.Number = 70

با apiی CreateFile هم میتوانیم که البته اون هم روشی مشابه همین دارد

موفق باشید