
הטקסט המלא של הדקות הראשונות בהרצאה «Write File» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
טוב אז אנחנו ממשיכים בתרגיל של כתיבה לקובץ אז זה write file sample בואו נפתח את זה ונפתח בעצם נפתח את ה srn ישר מvisual studio זה יפה יפה אז יצרנו קובץ חדש הדבר הבא שאני רוצה לעשות זה לכתוב לקובץ בואו נקרא לwrite file לwrite file צריך להעביר את ה h file אז ניתן לו h file עכשיו הוא רוצה LP באפר לונג פוינטר לקונסטנט ווייד פוינטר
לווייד זה הבאפר שבו יש את המלל עצמו בין אם אסקי בין אם יוניקורד חוץ מזה הוא רוצה בדי וורד את מספר הבתים number of bytes כמה בתים מתוך הבאפר הזה לכתוב לקרוב מה עוד number of bytes פה הוא מחזיר זה פוינטר הוא מחזיר לנו, כן, כי הפונקציה הזאת רק אומרת אם היא הצליחה או נכשלה.
יכול להיות שהוא אמור, בקיצור, לא משנה מה הסיבה. פה הוא מחזיר כמה בתים באמת נכתבו על הכובד, וכאן יש אפשרות עם אוברלאפ להגיד לו תבטל את הכתיבה בצורה א-סינכרונית ותיידע אותנו בתוך האוברלאפ הזה ניתן להעביר לו איבנט.
בקיצור, בצורה זה איזשהו מנגנון אסינכרוני שלא מעניין אותנו לא היום טוב אז מה שאני רוצה זה להעביר לו את הבאפר אז אני רוצה לכתוב לו כמובן משהו אז מה אנחנו נכתוב לו long pointer לבאפר הייתי רוצה להעביר לו הלואו מושן יפה עכשיו שימו לב שwrite file
היא לא write file w זאת אומרת אני תמיד כותב בלי w והוא לא משלים אותי ב w זאת אומרת הוא לא יודע מה זה טקסט אין פה str בסיפור הזה סתם באפר זה האמת היא שאני יכול לכתוב לו את הלו משה אין לי בעיה להעביר לו את הלו משה אם כי התוכנית הזו לא תתקמפל כי הוא לא יודע מה זה הסימן הזה אם אני אנסה עכשיו לקמפל את זה בוא ננסה רגע לקמפל ככה בוא נגיד לו 0 0 0 סגור
ובוא ננסה להריץ הוא אמור לצעוק עליי הוא לא צועק עליי הוא לא צועק עליי הוא לא צועק עליי אוהו הוא לא צועק שם הוא לא צועק הוא לא צועק כי הוא צודק זה לא שהוא לא מבין מה זה גרשיים הוא יודע מה זה גרשיים והוא יודע מה זה אל גרשיים אל גרשיים זה אומר תווים שהם יוניקורד וגרשיים רגיל זה אנסי בטח שהוא מבין הוא מבין גם את זה הוא מבין גם את זה הוא מבין את שניהם השאלה היא מה אני
רוצה לשלוח מכיוון שהפונקציה הזו היא פוינטר לווייד פוינטר לווייד כל דבר מתקבל זה הרעיון של פוינטר לווייד כל דבר הוא פה ניתן להמיר כל דבר, כל פוינטר ניתן להמיר לפוינטר לבוייד.
אז אין בעיה להעביר את הלא מורשה, אז בואו נעביר את הלא מורשה, מה הבעיה? יפה, עכשיו כמה בית to write מתוך המערך הזה שאנחנו צריכים? בואו נגיד נכתוב רק את 1, 2, 3, 4, 5. יהיו רק 5 תווים לכתוב לכובד.
יפה, ונאמברופו יחזיר לי כמה בתים באמת נכתבו. מסקרן אותי באמת לראות מה הוא אומר זה מסוג די וורד קונטרול רווח אנטר והוא קורא איזה בוא נרחף מעליו לא זה אני אעשה קליק פה קונטרול שיפטר והוא קורא לזה לונג פוינטר לנאמבר אוף בייט ריטן אז באופן מנהלתי אנחנו קוראים לשם המשתנה כמו הפרמטר שהוא רוצה שזה נאמבר אם אני גדולה נאמבר אוף בייט ריטן
ואני אעשה אותו שווה ל-0 כדי שכשהוא מעדכן אותו אנחנו נראה את זה בצורה ברורה number of control רווח יפה מאוד והאחרון באמת הוא יישאר 0 ואני כן רוצה לראות מה הפונקציה מחזירה אז אני אגיד לו פה בול control רווח אני עושה בול גדול
כי זה מה שהפונקציה אמורה להשיב אם את יודעת בול גדול לא בול קטן תקפידו זה לא בשפת c++ זה בשפת c יכול להיות שהוא יקבל את זה אבל אני אוהב להיות קורס כי אני אוהב להיות נכון אני לא רוצה שהוא יקבל אני רוצה להיות מדוייק הוא רוצה בול גדול נותן לו בול גדול בול גדול b ואני יכול לקרוא בקלות לשם משתנה write file b write file שווה לזה בוא נגיד
לו תנסה יפה אז הוא יוצר את הקובץ ואני אומר יפה יוצר את הקובץ אם הוא תמיד נותן לקובץ את אותו מזהה fdc זה מעניין עוד נחשוב על זה בהמשך ונאמבר אוף ביי טרידן וקדימה ונראה שהוא הצליח כמה פרטים הוא כתב 5 בדיוק כמו שביקשנו אז בואו נלך לקובץ ונראה מה נהיה מהקובץ פה וניכנס מה זה וניכנס
ל-write file פה שימו לב זכרו שהוא שם את הקובץ שלו כמו c-sharp ששם את הקובץ ליד האג זה ב-c-plus-plus אז הם שמים את הקובץ משום מה ליד הקוד ליד הc++ למיניהם הנה הc++ נותנים את הקובץ הוא לא נותן אז בסדר אז בואו נגיד לו תה ונגיד לו פשוט סיים ואז הוא אמור לשחרר ואז דאבל קליק יפה והנה הלו בדיוק בלי אפילו רווח אחרי זה יפה אז הצלחנו לכתוב לו קובץ יפה
הדבר הבא שמעניין אותנו זה לקרוא מהקובץ. בואו נקרא מהקובץ. כדי לקרוא מהקובץ יש פונקציית API שנקראת readfile. יפה.
ופה שוב נותנים לה את ה-hfile, קונטרול רווח. המתינו בבקשה. יפה. אז קונטרול רווח ו-hfile, enter.
מה עוד צריך להעביר לו? שוב, את הבאפר, רק הפעם לאן לכתוב את מה שהוא קורא מהקובץ. צריך להגדיר לו באפר, זאת אומרת שצריך לבוא ולהגדיר לו באפר.
עכשיו אנחנו יודעים שזה בעצם מערך של תווים, אז אני אגיד לו char ונקרא לזה buff וזה יהיה מערך, אנחנו יודעים שזה בדיוק בגודל של 5, אז נגדיר את זה בדיוק בגודל של 5, אבל אני גם אאפס את זה, עכשיו באופן כללי לאפס מערך אפשר כך, אבל מערך של charים אפשר גם לאפס כך, יפה אז גם ככה אני יכול לאפס מערך של צ'ארים בואו נראה קונטרול שליף את הערך פה אני צריך
לתת לו כן lp void מה יקרה אם אני אתן לו buff הרי buff זה לא מסוג lp void אבל אני יכול להעביר כל פוינטר buff זה כתובת של מערך שם של מערך הוא כתובת של אתר הראשון אני מעביר את הכתובת של אתר הראשון כתובת של היא מסוג צ'אר כוכבית וlp void זה וולט כוכבית כל דבר כוכבית אני יכול להעביר איפה שמתבקש וולט כוכבית לכן זה יעבור יופי ו-number of
bytes to read כמה בתים לקרוא לזה בדיוק 5 ו-number of bytes read כמה בתים הוא באמת קרא אז בואו נגדיר משתנה number of bytes read אז dword control רווח enter number of bytes read אני אאפס אותו כדי שנראה את זה, קצת קל לי לדבק, לראות אם הוא מחזיר, הרי מי שמקבל את זה, מי שהריד פייל עלול לא לעדכן את זה
ולהשאיר את זה מזובל, אבל אם זה 0 והוא לא מעדכן את זה אני אראה שזה נשאר 0 אם זה מזובל קשה יהיה לזכור מה זה היה, מה זה נשאר, הרבה יותר קל לראות ש-0 נשאר 0 מאשר fd 0.0057 נשאר אותו מספר, בקיצור תמיד לאפס תמיד תמיד אפס ונאמבר number of byte red קונטרול רווח זה 0 אנחנו בהמשך נלמד על האוברלאפ והוא
רוצה בול אז גם כאן נגדיר בול קונטרול רווח enter בול מה b וקונטרול שיפט חצי ימין וקונטרול v רווח שווה יפה ובצע, no מה הבעיה? קילט קונוורט, מה קילט קונוורט? קילט קונוורט, אולי יש איזושהי בעיה בסך הכל?
קילט קונוורט פרמטר ארבע, זה אחד, שתיים, שלוש, ארבע, נכון? בדיוק, זה כתובת של, בדיוק, ונריץ, יפה, וקריאייט פייל, וכתוב לכובד, וקרא מה הכובד.
השאלה היא מה יש בבאף? 0, 0, 0, number of bytes read, 0. הוא לא הצליח לקרוא מן הקובץ. רגע, רגע, רגע. ו-hfile יש לנו.
writefile הצליחה. readfile הצליחה. הוא הצליח לקרוא מזה, הוא לא מילא לנו כלום. אמרנו לו 5, ומבחינתו, כאילו ביקשנו שהוא יקרא 0 תווים.
בואו נראה את הקובץ, זה הקובץ הישן הזה. הקובץ החדש לא אמור להיות שונה, הוא לא נותן לראות. אז למה באף הוא במצב הזה? למה אין בו תווים?