PDA

View Full Version : مشکل با System.IO



Alirezanet
شنبه 03 بهمن 1388, 23:13 عصر
سلام با این کدSystem.IO.File.GetAttributes قاعدتا باید بشه مثلا فهمید که یه فایل هیدنت هست یا نه و یا فایل سیستمی هست یا نه ولی کار نمیکنه و نمیدونم چرا؟!؟!؟؟!؟ هیچ اروری هم نمیده فقط مثلا همچین شرطی رو که میزارم مقدار false برگشت میده !؟!؟!؟ کسی میدونه چرا؟!



If File.GetAttributes(adrs) = FileAttributes.System Then


در ضمن adrs همون آدرس فایل هستش ...

Netsky
شنبه 03 بهمن 1388, 23:43 عصر
سلام دوست عزیز .
کد شرط رو کامل بگذار .

Alirezanet
یک شنبه 04 بهمن 1388, 00:37 صبح
سلام دوست عزیز .
کد شرط رو کامل بگذار .

کامله ........

شما چجوری چک میکنین که یه فایل آیا فایل سیستمی هست یانه و یا هیدن هست یا نه؟

Netsky
یک شنبه 04 بهمن 1388, 00:46 صبح
سلام .
چه جوری میگید که شرط کامله ؟؟؟
یعنی بعد از Then هیچ دستوری نیست ؟؟؟

Rejnev
یک شنبه 04 بهمن 1388, 00:47 صبح
سلام
باید خروجی تابع رو تست کنید بعد ببینید خروجی مد نظر رو میده یا نه



Me.Text = System.IO.File.GetAttributes("d:\d.txt").ToString();

این رو ببینید چه خروجی ای میده تا بگم
احتمالا دو تا صفت داره مثلا Archive , ReadOnly با هم که با شرط متناقض میشه
باید شرط ها رو Or کنید کد C#‎‎ زیر رو ببینید



if (System.IO.File.GetAttributes("d:\\d.txt") == (System.IO.FileAttributes.Archive | System.IO.FileAttributes.ReadOnly))
{
Text = "archive and readOnly";
}

Alirezanet
یک شنبه 04 بهمن 1388, 01:15 صبح
من هم همین راه و حدودا (مشابهش ) رفتم ولی جواب نگرفتم ...
اکسپلورر ویندوز رو دیدین ! برنامه من قسمتی مثله اون داره که مثلا لیست فایل های توی 1 درایو رو توی 1 treeview اضافه میکنه ... من میخوام که فایل های سیستمی رو مشخص کنم که اضافه نشه ولی نمیتونم شرطی واسش پیدا کنم .

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




Private Function filecheck(ByVal adrs) As Boolean

If File.GetAttributes(adrs) = FileAttributes.System Then
Return True
Else
Return False
End If
End Function

Alirezanet
یک شنبه 04 بهمن 1388, 01:19 صبح
سلام
باید خروجی تابع رو تست کنید بعد ببینید خروجی مد نظر رو میده یا نه



Me.Text = System.IO.File.GetAttributes("d:\d.txt").ToString();




این رو ببینید چه خروجی ای میده تا بگم






احتمالا دو تا صفت داره مثلا Archive , ReadOnly با هم که با شرط متناقض میشه



باید شرط ها رو Or کنید کد C#‎‎‎‎ زیر رو ببینید






if (System.IO.File.GetAttributes("d:\\d.txt") == (System.IO.FileAttributes.Archive | System.IO.FileAttributes.ReadOnly))





{





Text = "archive and readOnly";





}








آره فهمیدم مشکل کجاست ... همین طوره چند صفت دارند ولی خوب چجوری میشه بهش گفت که اگه یکی از اون چند تا System بود یا ReadOnly بود اجرا شه ؟!؟؟!

Rejnev
یک شنبه 04 بهمن 1388, 01:44 صبح
این هم یک سرچ ساده و نتیجه:
http://www.csharp-examples.net/file-attributes/
میگه باید اینطوری بنویسید:



if ((File.GetAttributes(address) & FileAttributes.System) == FileAttributes.System)
{
Text = "System";
}
.
.
.

Netsky
یک شنبه 04 بهمن 1388, 14:29 عصر
ولی خوب چجوری میشه بهش گفت که اگه یکی از اون چند تا System بود یا ReadOnly بود اجرا شه ؟!؟؟!
از ساختار Select - Case استفاده کن .

Alirezanet
یک شنبه 04 بهمن 1388, 14:48 عصر
مشکل با کدی که دوستمون آقای mohammad_bagherani گذاشت حل شد ...
باید در چنین شرایطی شرط رو اینجوری نوشت ...


Private Function fileScheck(ByVal adrs As String) As Boolean

If (File.GetAttributes(adrs) And FileAttributes.System) = FileAttributes.System Then
Return True
Else
Return False
End If
End Function

این کامل شده ی تابعی هست که من در بالا گذاشته بودم .. قسمت بولد شده شرط مورد نظر هست. وقسمتی که قرمز هستش رو توی شرط باید اضافه میکردیم.