האופרטור And
-
יש פונקציה כזו שמביאה תוצאות נכונות, אבל אני ממש לא מבין איך האופרטור And עושה את זה:
Public Shared Function IsDir(path As String) As Boolean Try If (File.GetAttributes(path) And FileAttributes.Directory) = FileAttributes.Directory Then Return True End If Catch ex As Exception End Try Return False End Function
אשמח לשמוע הסבר,
תודה לכולם.פורסם במקור בפורום CODE613 ב02/04/2014 13:03 (+03:00)
-
עוד לא הבנתי מה הפונקציות שם מחזירות אבל הקוד עצמו הוא לא תקין צריך להיות כך:
Public Shared Function IsDir(path As String) As Boolean Try Return (File.GetAttributes(path) And FileAttributes.Directory) = FileAttributes.Directory Catch ex As Exception End Try Return False End Function
פורסם במקור בפורום CODE613 ב03/04/2014 13:51 (+03:00)
-
זה נקרא פעולות על סיביות.
הסיביות זה סדרה של בולאינים - כן/לא.
כשרוצים לתת הרבה אופציות לקבוצת בתים אחת (בית זה 8 סיביות) משתמשים בEnum מיוחד שמאפשר לתת ריבוי ערכים של כן לא (8 לכל בית).
(כתבתי על זה בעבר פה: http://tchumim.com/post/1236).כדי לדעת עם סיבית דלוקה, כלומר אפשרות אחת פעילה או כבוייה, אי אפשר להשוות ישירות לערך הרצוי (FileAttributes.Directory), כי גם אם הם שווים בערך הההוא ספציפית התוצאה תהיה שהם אינם שווים בגלל אפשרויות אחרות שדלוקות או מכובות.
לדוגמה:
0 0 - האם לקריאה בלבד? בשתי המקרים לא.
1 0 - מסותר
0 0 - מערכת
0 0
1 1 - תיקיה
...זה דוגמה שהעמודה הראשונה זה הקובץ והשניה זה האפשרות תיקיה בלבד דלוקה (FileAttributes.Directory). השוואה בינהם תניב שלילי בגלל האפשרות מוסתר שדלוקה במקור. מה שאנחנו רוצים זה לבודד את הדיקה רק על האפשרות תיקיה האם היא דלוקה, איך נבדוק זאת?
אז פעולת הAND (יש גם OR, XOR, NOT) עושה ככה, היא מחברת את שתי העמודות - מדליקה רק אם בשתיהם היה דלוק. זה מאפשר לבדוק את כל האוסף כולו כי כל האפשרויות הלא רלוונטיות סוננו ע"י הAND.פורסם במקור בפורום CODE613 ב03/04/2014 14:59 (+03:00)