PDA

View Full Version : آيا فايل هم اكنون in use است؟



b.mahsa
دوشنبه 05 مهر 1389, 14:14 عصر
چه طور ميشه فهميد فايلي كه تو شبكه share شده توسط فرد يا برنامه ي ديگه اي in use هست يا نه؟
آيا اطلاعاتي در اين رابطه (inuse بودن فايل ) در header فايل ذخيره ميشه؟

محسن شامحمدی
دوشنبه 05 مهر 1389, 19:53 عصر
یک ایده دارم شاید البته راه حل بهتری هم باشه.
فایل روی شبکه رو rename کنید ببینید اگر error داد. معلوم می شه فایل در استفاده است.

b.mahsa
سه شنبه 06 مهر 1389, 09:07 صبح
ممنون از پاسختون . ولي بسياري از user ها محدود هستند . (rename كردن راه زياد منطقي نيست.)
يك سري اطلاعات مثل last modified,size , location در header فايل ذخيره ميشه. فكر ميكنم inuse بودن فايل هم ذخيره ميشه. فقط من نميدونم با چه عنواني ذخيره ميشه و چه طور ميشه بازيابيش كرد؟
ممنون ميشم اگر كسي چيزي در اين رابطه ميدونه . راهنماييم كنه.

ashkan209
سه شنبه 06 مهر 1389, 15:00 عصر
فکر کنم با FileSystemWatcher بشه کاری کرد

http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.aspx

raravaice
سه شنبه 06 مهر 1389, 15:07 عصر
يك سري اطلاعات مثل last modified,size , location در header فايل ذخيره ميشه.این موارد در header فایل ذخیره نمیشن در Partition Table ذخیره میشن.

شما برای اینکه متوجه بشین فایل در حال استفاده است یا نه کافیه یکبار سعی کنید فایل را باز کنید اگر باز شد که هیچ اگر نه از error مربوطه به این نکته میشه پی برد که امکان باز کردن فایل وجود نداره.

مثلا :
http://dotnet-snippets.com/dns/check-if-file-is-in-use-SID583.aspx

یا

http://bytes.com/topic/visual-basic-net/answers/375012-file-use-detection
موفق باشید

b.mahsa
سه شنبه 06 مهر 1389, 16:40 عصر
ممنون از پاسختون .
فایلی که دارم یه بانک foxpro روی شبکه است. که توسط برنامه های دیگه داره استفاده میشه (به صورت read و write) برنامه من قبل از اجرا یک سری از ستون ها رو ترجمه میکنه (edit) اگر بقیه user ها در حال خواندن باشن error میده.
میخوام بررسی کنم و ببینم کسی در حال خواندن فایل هست یا نه.

open کردن بانک. مشکل رو حل نمیکنه. ممکنه چندین نفر بخوننش.
اما با توجه اشاره ای که دوستمون 09111111111 در بالا کردن . اگر فایل باز باشه . امکان rename نداریم.
پس این اطلاعات(inuse بودن) باید جایی در اطلاعات فایل ذخیره بشه .

ashkan209
سه شنبه 06 مهر 1389, 17:09 عصر
اگر بقیه user ها در حال خواندن باشن error میده.
میخوام بررسی کنم و ببینم کسی در حال خواندن فایل هست یا نه.

خب از همین error استفاده کن برای هندل کردن in use بودن فایل ؟

b.mahsa
سه شنبه 06 مهر 1389, 20:46 عصر
دوست عزیز میخوام کار به error نرسه .
handle بعد از Error . میشه نوش داروی بعد از مرگ سهراب.:چشمک:

hero4000
چهارشنبه 07 مهر 1389, 08:20 صبح
دوست عزيز فکر کنم شما متوجه منظور جناب raravaice نشدين

منظور ايشون بازکردن بصورت فايل متني بود نه به صورت ارتباط با بانک

به مثال زير که توي لينک ايشون بود توجه فرمائيد



Public Function FileInUse(ByVal sFile As String) As Boolean
If System.IO.File.Exists(sFile) Then
Try
Dim F As Short = FreeFile()
FileOpen(F, sFile, OpenMode.Binary, OpenAccess.ReadWrite, OpenShare.LockReadWrite)
FileClose(F)
Catch
Return True
End Try
End If
End Function

b.mahsa
چهارشنبه 07 مهر 1389, 09:20 صبح
ممنون مشكلم حل شد.

Shahram_Shobeiri
چهارشنبه 07 مهر 1389, 11:14 صبح
دوست عزیز میخوام کار به error نرسه .
handle بعد از Error . میشه نوش داروی بعد از مرگ سهراب.

این روش که ظاهراً مشکل شما باهاش حل شده هم هندل بعد از اروره دیگه!!!

hossein-khoshseyar
چهارشنبه 07 مهر 1389, 11:47 صبح
این روش که ظاهراً مشکل شما باهاش حل شده هم هندل بعد از اروره دیگه!!!

درست هندل بعد اررور هستاما این ارور براش ارزشی نداره چون داره فایل رو به شکل باینری باز میکنه و اگه با خطا مواجه بشه میفهمه که فایل بانکش در حال استفاده توسط سایرین هست

b.mahsa
چهارشنبه 07 مهر 1389, 11:49 صبح
منظور دوستمون آقاي ashkan209 استفاده از error اي بود كه بعد از اجراي برنامه ي من رخ ميداد.
ولي با كد جناب raravaice قبل از اجراي برنامم وضعيت فايل چك ميشه. اگر inuse باشه . اصلا برنامه من اجرا نميشه.