PracticU

קבצים - Files - חלק 6

בלי כתוביותעם כתוביות
PracticU › קורס תכנות מתקדם - #Advanced .NET C › קבצים - Files - חלק 6
מילון מושגים:
בינארי - ייצוג מידע בבסיס 2 בעזרת הספרות 0 ו-1. גם קובץ הכולל קוד מכונה ולא טקסט קריא.
מחרוזת - סוג נתונים שמייצג רצף של תווים, כלומר טקסט, ומשמש לאחסון מילים, משפטים או כל רצף סימנים.
זיכרון - רכיב מהיר ונדיף שבו המחשב שומר נתונים ותוכניות בזמן ריצתם. תוכנו נמחק עם כיבוי המחשב.
ASCII - תקן לקידוד תווים שמייצג אותיות, ספרות וסימנים כמספרים, ומשמש בסיס לייצוג טקסט במחשב.
קומפיילר - תוכנה שממירה קוד מקור שנכתב בשפת תכנות לקוד שהמחשב יכול להריץ, ומדווחת על שגיאות תחביר.
בייט - יחידת מידע המורכבת משמונה ביטים, ומסוגלת לייצג תו בודד או מספר בין 0 ל-255.
הקסדצימלי - שיטת ספירה בבסיס 16, המשתמשת בספרות 0-9 ובאותיות A-F, ונפוצה לייצוג ערכים בינאריים בקצרה.
Visual Studio - סביבת פיתוח משולבת (IDE) של מיקרוסופט לכתיבה, ניפוי והרצה של קוד, בעיקר בשפות .NET.

קבצים - Files - חלק 6
בשיעור הזה משווים בין קובץ טקסט לקובץ בינארי, ומראים איך כותבים וקוראים ערכים מטיפוסים שונים לקובץ בינארי בעזרת BinaryWriter ו-BinaryReader.
השלבים העיקריים
1. ההבדל המרכזי: בקובץ טקסט כל ערך מומר למחרוזת לפי קידוד מסוים, ולכן הוא מתנפח. בקובץ בינארי מועתק הייצוג הפנימי של הערך כמו שהוא בזיכרון. דוגמה: המספר 123.456 מסוג float נשמר כ-7 בתים בקובץ טקסט, אבל כ-4 בתים בקובץ בינארי.
2. קידוד: StreamWriter יכול לקבל קידוד, כמו ASCII שמכיל רק תווים באנגלית, או UTF שמאפשר תווים בינלאומיים. בלי הגדרה הוא משתמש בקידוד ברירת מחדל.
3. פתיחת FileStream: בשביל BinaryWriter צריך קודם FileStream. אפשר לפתוח אותו עם הפונקציה Open ולציין את מצב הפתיחה ואת סוג הגישה, או עם File.Create, שמשמש ליצירת קובץ חדש או דריסה של קיים ומאפשר כתיבה.
4. כתיבה בינארית: Write של BinaryWriter מקבל ערכים מכל טיפוס, והקומפיילר בוחר את ההעמסה לפי הטיפוס. מספר 1 מסוג int נשמר כארבעה בתים, ומספר 1 מסוג byte נשמר כבית אחד. לכן הטיפוס שנשמר חשוב.
5. קריאה בינארית: BinaryReader קורא לפי סדר ולפי טיפוס שמוגדר בקוד, כמו ReadString, ReadDouble, ReadInt32 ו-ReadByte. הקורא חייב לדעת בדיוק את הסדר והטיפוס שנשמרו, אחרת הנתונים יתפרשו לא נכון או התוכנית תיפול.
6. מחרוזת בקובץ בינארי: ReadString יודע כמה תווים לקרוא, כי בזמן הכתיבה נשמר לפני המחרוזת מספר התווים שלה. לכן קריאה לא נכונה, כמו קריאת מחרוזת במקום מספר, מפרשת את הבייט הראשון כאורך ונכשלת.
7. שגיאת סוף זרם: בקריאה שגויה התוכנית עלולה לנסות לקרוא מעבר לסוף הקובץ, וזו שגיאה מסוג "Unable to read beyond the end of the stream".
8. בדיקה בעורך הקסדצימלי: Visual Studio מאפשר לפתוח קובץ בינארי ולראות את הבתים בייצוג הקסדצימלי, ואפשר לראות בו את אורך המחרוזת שנשמר כבית ראשון.
בסיום השיעור ברור שקובץ בינארי הוא מידע גולמי שנכתב וננקרא לפי סדר קבוע, ושמי שקורא אותו חייב להכיר את הפורמט המדויק שנכתב.
השיעור הבא בקורס: קבצים - Files - חלק 7

פרקי ההרצאה: קבצים - Files - חלק 6

  1. 00:00

    ההבדל בין קובץ טקסט לבינארי

  2. 00:43

    שמירת מספר FLOAT

  3. 01:42

    שמירה לקובץ טקסט

  4. 03:04

    שמירה בינארית עם BinaryWriter

  5. 03:50

    פתיחת FileStream עם File.Create

  6. 05:34

    כתיבה בינארית ללא WriteLine

  7. 06:52

    השוואת הקבצים טקסט מול בינארי

תמלול ההרצאה: קבצים - Files - חלק 6

הטקסט המלא של הדקות הראשונות בהרצאה «קבצים - Files - חלק 6» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:06

    נבצע פייל ניו פרוג'קט והדבר הראשון שאני רוצה לבצע זה להבין מה בעצם ההבדל בין קובץ בינארי לקובץ טקסטואלי אז בואו נפתח פה project difference between text file and binary file ואנחנו הולכים לראות משהו מאוד מעניין שלא הרבה שמים לב אליו והוא בעצם קובע את ההבדל בין קובץ טקסטואלי לקובץ בינארי ומה שאני רוצה לעשות זה משהו מאוד מאוד פשוט

  2. 00:43

    מה שאני רוצה לעשות זה לפתוח משתנה אחד ויחיד מסוג float, נקרא לו number ונכניס אליו את המספר 123.456 בגלל ש-123.456 זה מספר עשרוני ובעצם זה מספר עשרוני ואפשר להתייחס אליו כאילו שהוא קבוע עשרוני כמובן ואנחנו יודעים שלקבועים יש טיפוסי נתונים הטיפוס נתונים בשפות c עבור קבוע זה דאבל

  3. 01:18

    אז כל מה שאנחנו צריכים לעשות זה להפוך אותו ל-float והנה יש לנו מספר floaty1 אנחנו יכולים להציג אותו ולראות שאכן זה המספר שאנחנו רואים ומה שאני רוצה לעשות אני רוצה לשמור את המספר הזה רק את המספר הזה לקובץ טקסטואלי ולשמור את המספר הזה לקובץ בינארי ואז לבצע איזושהי השוואה ביניהם ואתם הולכים לראות משהו מאוד מעניין בנוגע לזה.

  4. 01:48

    איך אנחנו שומרים את המספר לקובץ טקסטואלי? streamwriter כמו שראינו writer שווה new streamwriter נתחבר לאיזשהו קובץ בואו ניקח את תיקיית temp או test letter דיוק בקונן c ובתוכה תיקיית a ונשמור את זה ל myfile.txt writer.write שימו לב שאני אפילו לא רוצה לרשום right line כן, רק לרשום את המספר

  5. 02:27

    נטו בלבד ו-writer.dispose וזה כל מה שאני רוצה לעשות. אוקיי, בואו נריץ את זה. התוכנית הסתיימה ואני רוצה לגשת ולהסתכל על הקובץ ואני רואה אותו כאן. אם אני פותח אותו אני כמובן רואה את המספר בתוכו והכל בסדר.

  6. 02:53

    עכשיו אני רוצה לבצע שמירה של אותו המספר בדיוק גם לקובץ בינארי. בואו נפתח פה מקום. אז ראשית, איך אנחנו בעצם שומרים את המספר הזה לקובץ בינארי?

  7. 03:11

    אז אנחנו צריכים לשמור על ידי בינארי רייטר וכמובן לקרוא על ידי בינארי רידר. בואו ניקח כאן את המשתנה הראשון, נקרא לו טקסט רייטר, כדי שלא יפריע לנו ליצור את המשתנה השני שיהיה בינארי רייטר.

  8. 03:38

    אבל הבעיה היא שהקונסטרקטור של המחלקה בינארי רייטר לא מקבלת נתיב לקובץ טקסטואלי וזה אומר שאנחנו צריכים לפתוח סטרים.

  9. 03:51

    אז איך אנחנו פותחים סטרים? על ידי פייל סטרים. פייל סטרים זה סטרים ספציפי לתוך קובץ שלא מגדיר האם אנחנו כותבים לתוכו או האם אנחנו קוראים ממנו.

  10. 04:07

    אנחנו יכולים לפתוח סטרים בצורה כזאתי, נקרא לזה בינארי סטרים לצורך כתיבה וכל מה שאנחנו צריכים לעשות זה file.create זה בעצם פותח לנו סטרים ואנחנו יכולים לבצע כתיבה לתוכו, כלומר הסטרים שנפתח לנו מצביע לנו על קובץ שפה אנחנו נותנים את הנתיב שלו ואנחנו אוטומטית יכולים לכתוב לקובץ, זאת אומרת שהסטרים שנפתח הוא מיועד לכתיבה.

  11. 04:44

    לכן אנחנו יכולים עכשיו להתחבר לאיזשהו קובץ או ליצור איזשהו קובץ, ניקח טקסט תקיית a myfile ולא ניקח אותו txt ניקח אותו bin שזה קיצור של בינארי עכשיו אחרי שיש לנו בינארי סטרים אנחנו יכולים לתת אותו לבינארי רייטר ולא לשכוח בסוף לסגור את שניהם כאשר כל הזמן הסגירות צריכות להיות הפוכות לפתיחות זאת אומרת מי שנסגר אחרון נפתח ראשון בינארי רייטר נקודה dispose ו-BinaryStream.dispose בצורה

  12. 05:28

    כזאת. עכשיו כאן כאשר אנחנו רוצים לבצע שמירה אז כל מה שאנחנו צריכים לעשות זה BinaryWriter.write ושימו לב שאין לנו right line זאת קודם כל נקודה שהיא בסיסית ואחד ההבדלים הבסיסיים בין קובץ טקסטואלי לקובץ בינארי.

  13. 05:58

    קובץ טקסטואלי בגלל שהמטרה שלו זה שבן אדם יסתכל עליו ויקרא אותו אז יש לנו שם המידע שמוצג כתווים שניתן לקרוא אותם ובנוסף יש לנו שורות שורות שכל שורה מסתיימת באנטר אז אנחנו היינו יכולים לבצע רייטליין ולכתוב שורה אחת ואוטומטית הייתה מתבצעת

  14. 06:18

    ירידת שורה בתוך הקובץ אבל כאשר אנחנו מתעסקים עם קבצים בינאריים אנחנו לא כותבים פה שורות ואנחנו לא כותבים פה טקסטים אנחנו כותבים פה מה שנקרא מידע טהור לכן כל מה שיש לנו פה זה פונקציית right והיא אומרת לנו מה המידע שאתה רוצה לכתוב שימו לב שיש לנו פה מלא מלא מלא מלא העמסות בואו נרשום פה num כי זה המידע שאני רוצה לכתוב

  15. 06:42

    אני רוצה לבצע השוואה בול מול קובץ טקסטואלי לקובץ בינארי לכן כתבתי את אותו הדבר ומה שאני רוצה לעשות זה להריץ את זה ctrl f5 תוכנית רצה הסתיימה אני רוצה לחזור לתיקייה ולראות את שני הקבצים אחד ליד השני והנה אני רואה פה myfile.txt והנה אני רואה פה myfile.bin אם אנחנו מבצעים קריאה של הקובץ myfile.txt על ידי notepad אנחנו כמובן רואים את המספר

  16. 07:15

    123.456 אם אנחנו מבצעים קריאה של myfile על ידי notepad כלומר נבצע בדיוק את אותו הדבר

לקורס המלא: קורס תכנות מתקדם ב‑#C ודוט-נט

ההרצאה הקודמת: קבצים - Files - חלק 5

ההרצאה הבאה: קבצים - Files - חלק 7

הרצאות קשורות מקורסים אחרים

  • קבצים - files
  • Text Files
  • files ownership
  • עבודה עם קבצים ב-Xcode - חלק 1

קורסים נוספים במסלול

  • קורס WinForms - תוכנות רגילות בווינדוס
  • פרויקט מעשי ב-#C - בונים מחשבון פשוט
  • פרויקט מעשי ב-#C - ספר טלפונים
  • פרויקט מעשי ב-#C - תוכנת צייר
  • קורס ADO.NET - חיבור אתר למסד נתונים
  • קורס WCF - תקשורת למתקדמים בדוט-נט