
File.Exists בודק אם הקובץ קיים, File.Copy מעתיק ו-File.Move מעביר, כלומר מעתיק ומוחק את המקור.File.GetCreationTime ו-File.GetLastAccessTime מחזירים את זמן היצירה והגישה האחרונה.File.Delete מוחק קובץ, והקובץ לא נכנס לסל המחזור. מחיקה של קובץ שלא קיים לא גורמת לשגיאה.Directory.Exists), ליצור תיקייה (Directory.CreateDirectory), להעתיק או להעביר תיקייה עם כל תכולתה, ולקבל את רשימת הקבצים והתיקיות שבתוכה (GetFiles, GetDirectories).*.jpeg מביאה רק קבצים עם הסיומת הזאת. פרמטר נוסף קובע אם החיפוש נעשה רק בתיקייה עצמה או גם בתתי התיקיות.Directory.Delete לא מוחק תיקייה שיש בה קבצים, ולכן צריך קודם למחוק את הקבצים ורק אחר כך את התיקייה.הטקסט המלא של הדקות הראשונות בהרצאה «קבצים - Files - חלק 1» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
אנחנו מגיעים לנושא חדש והנושא הזה מתעסק בקבצים ותיקיות וכמו שאתם בטח מבינים זה נושא מאוד מאוד חשוב ומאוד מאוד בסיסי וגם מאוד שימושי שמשתמשים איתו כמעט בכל תוכנית.
מה אנחנו הולכים לראות בנושא הזה? קודם כל מה זה קובץ? איך אנחנו יכולים לבצע פעולות על קבצים? איך אנחנו יכולים לבצע פעולות על תיקיות? וכמובן כל מה שקשור לכתיבה וקריאה לקבצים.
אז בואו נתחיל. דבר ראשון, מה שאנחנו הולכים לראות זה איך אנחנו יכולים לבצע כל מיני פעולות על קבצים. אבל מה זה קובץ?
אז אנחנו יודעים שקובץ בעצם זה איזושהי יחידת מידע שנמצאת בתוך אזור זיכרון שהוא לא נדיף. מה זה אומר לא נדיף? לא נמחק כאשר סוגרים את האפליקציה.
אם אנחנו באפליקציה הולכים לפתוח משתנה לדוגמה int x ומכניסים לתוכו מידע, אחלה, אז שמרנו את המידע. כל המידע הזה נשמר באזור זיכרון שנקרא ראם Random Access Memory וזה הזיכרון שהתוכנית עובדת איתו ישירות.
ברגע שהתוכנית נסגרת הזיכרון נעלם. ברגע שהמחשב נסגר גם הזיכרון נעלם, מה ששמרנו לא ימשיך להתקיים ולכן זיכרון הראם נחשב זיכרון נדיף.
קובץ לעומת זאת יושב באזור זיכרון שהוא לא נדיף לדוגמה ההרדיסק ואנחנו יכולים לראות דרך סייר הקבצים אילו קבצים ותיקיות קיימים בהארדיסק על ידי העץ הזה שאנחנו רואים פה של כל הקבצים והתיקיות.
כאן לדוגמה בכונן C אנחנו רואים שיש לנו תיקיית טסט ובתוכה תיקייה C או שלוש תיקיות ABC וב-C יש לנו כל מיני תמונות.
אז תמונה בייסיקלי זה קובץ פשוט מחזיק לנו מידע של פיקסלים ולכן ברגע שלוחצים עליו דאבל פליק נפתחת איזושהי תמונה וכל המידע הזה שמור כקובץ בהארדיסק.
לא רק ההארדיסק נחשב זיכרון שהוא לא נדיף, יכול להיות לנו גם לדוגמה דיסק און קי, שהוא זיכרון שלא נמחק, יכול להיות סידי רום שאנחנו יכולים לשמור שם מידע, גם כן זה זיכרון שהוא לא נדיף, ועוד כל מיני סוגי זיכרונות שקיימים שבכולם אנחנו יכולים לשמור קבצים.
אם כך, קובץ זה פשוט מאוד יחידת המידע הזאת שניתן לשמור אותה בזיכרון הזה, ניתן לפתוח אותו, לכתוב אליו, לקרוא ממנו מידע דרך תוכנית שאנחנו כותבים, ומה שהולכים לעשות כרגע זה פעולות על קבצים כולל כתיבה וקריאה.
אוקיי, מילה אחת לפני שרק נתחיל, לקובץ אנחנו רואים שיש סיומת, זה בעצם מה שמופיע אחרי הנקודה האחרונה של הקובץ, ונהוג לחשוב שהסיומת קובעת את הקובץ וזה לא דבר שהוא מדויק להגיד.
כל מה שהסיומת אומרת במערכות הפעלה Windows זה שכאשר אתם לוחצים דאבל קליק על הקובץ, לפי הסיומת, מערכת ההפעלה יודעת איזה תוכנה להשתמש בה בשביל להציג את הקובץ. זה כל מה שהסיומת אומרת.
אבל אם יש לי פה את התמונה הזאת שנקראת pool.jpeg ולדוגמה הייתי משנה לה את הסיומת ל-abc, האם עדיין זה תמונה או שזה לא תמונה? אז אם כך, עדיין הקובץ הזה נחשב קובץ תמונה כי לא שיניתי את המידע שיש בקובץ רק שיניתי כביכול את הסיומת שלו או את השם וסיומת
וכל מה שזה אומר זה אומר למערכת ההפעלה אני לא יודעת איך לפתוח את הקובץ הזה אבל זה עדיין קובץ תמונה שימו לב שכשאני לוחץ עליו דאבל קליק מערכת ההפעלה אומרת לי אני לא יודעת איך לפתוח אותו תגיד לי איך אתה בדיוק רוצה לפתוח אותו תבחר לי איזושהי תוכנה מסדרת תמונות שתפתח
את הקובץ אם אנחנו נגיד בסדר בואי תציגי לנו את סדרת הקבצים שמאפשרים לפתוח את הקובץ, אז מערכת ההפעלה יכולה להציג לנו פה איזושהי רשימה, ואומרת, הנה מספר תוכנות, תגיד איזה תוכנה אתה רוצה שתשמש בשביל להציג את הקובץ, בואו נבחר את זאתי, זאת
מסוגלת להציג תמונות, נבצע אוקיי, ונראה שעדיין נפתח הקובץ, זאת אומרת, זה ששיניתי את הסיומת זה לא אומר שזה כבר לא תמונה.
בואו נחזיר את זה בחזרה ל-JPG, בכדי שמערכת הפעלה תדע להבא איך לבצע פתיחה של הקובץ הזה. אז כעת, אחרי שאנחנו ראינו בגדול מה זה קובץ, בואו נסתכל אילו פעולות אנחנו יכולים לבצע על קבצים.
קיימת המחלקה פייל שנמצאת במרחב השמות system.io ש-io זה קיצור של input output שזה basically דברים שעושים איתם עם קבצים כי כותבים אליהם וקוראים מהם.
ופייל מכילה סדרה של פונקציות סטטיות שאנחנו יכולים לקרוא להם בכדי לבצע פעולות כלליות על קבצים. בואו נראה סדרה של פונקציות נפוצות. דבר ראשון אנחנו יכולים לבדוק האם קובץ מסוים קיים.
בואו ניגש לכונן c לתיקיית test ובתוכה לתיקייה a ונאתר איזשהו קובץ שנקרא myfile.txt. קודם כל כבר אנחנו רואים שיש לנו פה סדרת שגיאות בגלל שאנחנו יודעים שבצפות C, במשפחת צפות C, Backslash זה תו שיש לו משמעות מיוחדת, והוא אומר שאם לדוגמה אנחנו רושמים Backslash
ואות מיוחדת אחריו, אז יש משמעות אחרת ל-Backslash ולאות המיוחדת. לדוגמה Backslash-n אנחנו יודעים שזה Enter ולכן Backslash-m לא אומר שום דבר למערכת.
אם אנחנו רוצים ש.NET תדע מה אנחנו רוצים לעשות פה, ליתר דיוק c-sharp אז יש לנו שתי אפשרויות או לשכפל כל backslash ואז מכרוזת שהיא hardcoded עם backslash משוכפלים מציינת ש-backslash backslash זה למעשה backslash אחד או אם יש לנו לדוגמה נתיב כמו במקרה הזה ואנחנו לא רוצים ללכת ולשכפל את כל הקבצים כל מה שאנחנו
צריכים לעשות זה לשים שטרודל לפני המכרוזת וזה פותר לנו את כל הבעיה שטרודל אומר תתייחס לכל ה-backslash כאילו הם תווים רגילים ולא תו מיוחד שאחריו צריך לבוא תו אחר.
בסדר, אז כל מה שאנחנו רוצים לעשות זה לבדוק כרגע אם קובץ כזה קיים שם, וקובץ כזה לא אמור להיות קיים לנו פה. בואו נסתכל על תיקיית A שנמצאת בתוך תיקיית טסט ונראה שהיא ריקה לגמרי, ונחזור בחזרה ואנחנו רוצים לבדוק מה בעצם מוצג לנו כאן.
אז אנחנו יכולים לבצע איזושהי שאלה אם הדבר הזה קיים, בוא תציג לנו מה הפייל, myfile.txt exists else doesn't exist ויש לנו כרגע את הקוד בואו נריץ ונראה שהוא כותב לנו myfile.txt doesn't exist בסדר בואו נחזור בחזרה לתיקייה וניצור אותו מקש ימני new text file myfile.txt ונכתוב בתוכו גם איזושהי מחרובת Hello all נשמור נסגור נחזור לתוכנית
הרצה ואנחנו רואים שהוא מצא אותו. למה זה טוב לנו להשתמש עם הפונקציה הזאת? כי הרבה פעמים אנחנו רוצים לעבוד עם איזשהו קובץ שמחזיק לנו מידע ששייך לתוכנית שלנו כמו רשימה של מוצרים, רשימה של לקוחות, רשימה של מבצעים ואנחנו רוצים לשמור אותה בקובץ ואנחנו רוצים לדעת האם הקובץ הזה קיים כן או לא.
אם לא, אולי אנחנו רוצים להגיד למשתמש שייתר את הקובץ וזאת האופציה שלנו לבדוק את זה. אפשרות נוספת file.copy copy מבצעת העתקה של הקובץ הזה כאשר היא לא מוחקת את הקובץ מקור היא רק מעתיקה אותו אז בואו נעתיק את הקובץ שזה המקור אנחנו רואים פה source לדסטיניישן ונעשה בדיוק את אותו הדבר אבל נלך ונדביק אותו בתיקיה שנקראת b אותו קובץ בול העתקה בואו נריץ שימו לב רק
לפני שאני מריץ שבתיקיה b אין שום דבר נריץ את התוכנית תוכנית הסתיימה נחזור לתיקיית b והנה יש לנו פה את הקובץ שגם כמובן כל התוכן שלו הוא עתק כמו שהוא.
כמו שיש לנו פונקציית קופי יכולה להיות לנו הפונקציה move כאשר move מה שהיא עושה היא מעתיקה אותו אך גורמת למחיקה של הקובץ הקודם. בואו נעתיק אותו אפילו לתיקיית b ונראה אם אנחנו אפילו יכולים לשנות את השם ל myfile2 אני בכוונה לא רוצה לבצע פה קופי כי כבר עשינו קופי לפני זה.
אוקיי, אז בואו נבדוק את זה. נסתכל רגע בתקייה B, יש רק מייל פייל, נסתכל בתקיית A ונראה שיש פה גם כן את מייל פייל. בואו נחזור ל-B ונריץ. תוכנית הסתיימה בהצלחה, נחזור בחזרה ונראה שיש לנו פה את מייל פייל 2, אבל מה שיותר מעניין זה מה קרה לקובץ המקור שהיה פעם בתקיית A, ואם נסתכל על תקיית A
אנחנו נראה שאין פה קובץ. מעולה. הדבר הבא שאנחנו יכולים לעשות עם המחלקה פייל, ולקבל את זמן היצירה של הקובץ או כל מיני דברים שקשורים לזמנים של התעסקות עם הקובץ.
לדוגמה, יש לנו פה file.getCreationTime ניתן איזשהו קובץ, בואו ניקח את הקובץ הזה שנמצא בתיקיית b ונציג את מה שחוזר מהפונקציה.
נסתכל על תיקיית b ונראה שיש לנו פה את הקובץ myfile.txt, בואו נריץ ונקבל את זמן היצירה שלו שזה basically היום בשעה 2, 23 ו-27 שניות.
אותו הדבר יש לנו אפשרות לקבל את הפונקציה get last access time. בואו נריץ ונראה שלאסט אקסס טיים התבצע בזמן אחר כמובן כי לאחר מכן פנינו לקובץ ובדקנו משהו לגביו.
אז יש לנו פה כל מיני אפשרויות לקבל אינפורמציה לגבי לזמנים של מתי כתבו אליו ומתי קראו ממנו ומתי ניגשו אליו לאחרונה ומתי עצרו אותו וכולי, דרך המחלקה פייל.
אז יכול להיות הרבה פעמים שאנחנו רוצים לדעת האם הקובץ הזה עודכן, מתי הוא עודכן וכולי, יש לנו אפשרות לעשות את זה. פונקציה נפוצה נוספת נקראת delete ומאפשרת למחוק את הקובץ.
אז בואו נבצע מחיקה של אותו קובץ, נסתכל רגע בתיקיית b, נראה שיש לנו myfile.txt, נחזור לתוכנית, נריץ, נחזור בחזרה לתיקיית B ואין לנו קובץ, אחלה, נמחק.
בואו נסתכל על ה-recycle bin ונראה שהוא בכלל לא נמצא בתוך ה-recycle bin. יש לנו פה איזה תוכנית ישנה, נמחק אותה. ושימו לב שהקובץ לא נכנס ל-recycle bin אז נא להיזהר כשמשתמשים עם זה.
אוקיי, הדבר הבא, מה קורה אם אני מבצע מחיקה לקובץ שלא קיים? בואו נריץ ונראה שאין בעיה לבצע מחיקה של קובץ לא קיים כי מה שבעצם באתם ואמרתם, אני לא רוצה את הקובץ הזה אבל הוא לא קיים אז אין שום בעיה איתו.
אני לא רוצה שיהיה לי עץ בתוך החדר. אוקיי, אין לך עץ אז הכל בסדר. אז פה עשינו כל מיני דברים וכל מיני פעולות כלליות עם קבצים על ידי המחלקה פייל עם כל הפונקציות הסטטיות שקיימות בתוך המחלקה פייל.
בואו ניקח את כל הקוד הזה, נוציא אותו לפונקציה טסט פייל וכעת אנחנו מבצעים פחות או יותר דברים דומים עם דירקטורי אז דירקטורי בייסיקלי זה מחלקה שמאפשרת לבצע פעולות על תיקיות תיקייה אנחנו יודעים זה הצהוב הזה שבתוכה יש קבצים ותיקיות נוספות מה אנחנו יכולים לבצע בנוגע לתיקיות
דירקטורי נקודה אגזיסט