PDA

View Full Version : سوال: چگونگي رفع خطاي Access Denied در System.IO



EbiPenMan
سه شنبه 03 دی 1387, 21:34 عصر
سلام به همگي
من در موقع خوندن فولدر هاي سيستمي و يا آنهايي كه دسترسي بهشون محدود شده با خطاي زير روبرو مي شم.
Access to the path "...." is denied.

من نمي خوام كه اصلا اين فولدر هارو بخونم چون يه حلقه دارم و خودش مي ياد اسم يه سري فولدر رو مي خونه.

حالا فقط مي خوام كه اگه در اين حلقه به اين چنين فولدري بر خورد ازش بگذره و بقيه كارش رو انجام بده.

چطور وقتي كه اين خطا رخ ميده ازش بگذره دوستان فقط مي خوام از اين خطا بگذره ها. من هرچي سعي كردم نتونستم شماره اين خطا رو پيدا كنم.

من از اين تابع استفاده كردم :
IO.Directory.GetDirectory

h.jaza
سه شنبه 03 دی 1387, 23:39 عصر
EbiPenMan (http://barnamenevis.org/forum/member.php?u=15349) جان مشکلی نیست، دقیقتر توضیح بده از چه متد هایی استفاده می کنی.

تا اونجایی که من می دونم و تست هم کردم متد هایی مثل DirectoryInfo، FileInfo و StreamReader و امثال اینها مشکلی ندارن.

بیشتر توضیح بده.

Amir Oveisi
چهارشنبه 04 دی 1387, 09:50 صبح
اگر هم مشکلی داره (که من فقط تو ویستا بهش برخوردم نه XP) هر جا که دارین رو فولدرها یا فایلها یه عملی لنجام میدین قبلش با استفاده از Attribute هاش چک کنین ببینین اگه سیستمی نیست اون کار رو انجام بدین.

موفق باشید
jooje

molana alavi
چهارشنبه 04 دی 1387, 10:49 صبح
دقیقا درسته مثلا اگه بخواین فولدر System Volume Information رو باز کنید همچین مکلی پیش میاد شما براحتی می تونید با ساختار try و catch مشکلتون رو حل کنید

EbiPenMan
چهارشنبه 04 دی 1387, 16:01 عصر
دوستان من كل سورس رو مي زارم :



Dim dir_Division As String()
ReDim dir_Division(IO.Directory.GetDirectories(txt_Root. Text).Count())
dir_Division = IO.Directory.GetDirectories(txt_Root.Text)

Dim dir_Division_Count As String()
ReDim dir_Division_Count(dir_Division.Count())
Try
Dim i As UInteger
For i = 0 To dir_Division.Count - 1
dir_Division_Count(i) = IO.Directory.GetDirectories(dir_Division(i)).Count
Next
Catch ex As UnauthorizedAccessException
MsgBox(ex.Message)
End Try

اين كد مي ياد يك مسير روت از كاربر مي گيره هرچي مثلا C:\ بعد مي ياد اسم فولدراي داخل اين مسير رو در يك آرايه قرار ميده و در يك آرايه ديگه تعداد فولدر هاي داخلي هر يك از اين فولدر ها رو قرار مي ده.

برنامه تا جايي كه اسم ها رو مي گيره درست كار مي كنه ولي در حلقه مثلا به قول molana جان اگه فولدري مثل System Volume Information باشه كه دسترسي به داخلش نداره ارور ميده و بقيه فولدر ها رو چك نمي كنه من مي خوام اگه به چنين فولدري بر خورد به جاي خطا تعداد زير فولدر هاشو 0 بزاره و ازش بگذره.

bermoda جان هم خوب گفتند فقط من فكر نكنم كه اين نوع فولدر ها فقط به دليل سيستمي بودن اين خطا رو بده.

از h.jaza هم عذر مي خوام بله من در توضيح مشكل گفتم فقط نامشون رو مي خونم ولي داخلشون رو هم مي خونه :خجالت::خجالت:

molana alavi
پنج شنبه 05 دی 1387, 23:46 عصر
به نظر من شما نباید داخل catch هیچ کدی بنویسی یا حداقل چک کنی اگر استثناء روی داده همین استثناء بود هیچ پیامی نده و برنامه با صرف نظر کردن از این پوشه به کارش ادامه بده

Chabok
جمعه 06 دی 1387, 13:35 عصر
و یا به عبارتی Try Catch را داخل حلقه یعنی فقط روی دستور قرار دهید .


For i = 0 To dir_Division.Count - 1
Try
dir_Division_Count(i) = IO.Directory.GetDirectories(dir_Division(i)).Count
Catch : End Try
Next