PracticU

Write File

בלי כתוביותעם כתוביות
PracticU › קורס C למתקדמים - עבודה מול חומרה Win32 › Write File
מילון מושגים:
פונקציה - קטע קוד בעל שם שמבצע משימה מוגדרת, מקבל ערכי קלט (פרמטרים) ויכול להחזיר תוצאה. מאפשרת לארגן קוד ולהשתמש בו שוב.
משתנה - שם שמפנה למקום בזיכרון שבו נשמר ערך שיכול להשתנות במהלך ריצת התוכנית, כמו מספר, טקסט או אובייקט.
תיקייה - מכל במערכת הקבצים שמשמש לארגון קבצים ותיקיות אחרות בתוך מבנה היררכי.
פרמטר - ערך שמועבר לפונקציה או לפקודה כקלט, ומשפיע על אופן פעולתן ועל התוצאה שהן מחזירות.

Write File
זו המשך לתרגיל הקובץ: כתיבה לקובץ עם WriteFile, קריאה עם ReadFile, ומה קורה לפוינטר של הקובץ בין פעולה לפעולה.
השלבים העיקריים
1. WriteFile: הפונקציה מקבלת את ה-Handle, מצביע לבאפר, מספר הבתים לכתיבה ומצביע למשתנה שמקבל את מספר הבתים שנכתבו בפועל.
2. הכתיבה: בבאפר נכתבו חמישה תווים, והקובץ נשמר בתיקייה הנכונה. הבדיקה נעשית בפתיחת הקובץ בנוטפד.
3. ReadFile: הקריאה הראשונה לא החזירה שום תו, כי הפוינטר של הקובץ נשאר בסוף הכתיבה, והקריאה מתחילה מהמקום הנוכחי.
4. סגירה ופתיחה מחדש: פתרון ההרצאה הוא לסגור את הקובץ (CloseHandle) ולפתוח אותו שוב, כך שהפוינטר חוזר להתחלה.
5. Open Always: מסבירים שאם משתמשים ב-Open Always במקום Create Always, הקובץ לא נמחק ונשאר עם התוכן הקיים.
6. מספרי הפרמטרים: הגדלים מועברים כ-DWORD, והמצביע לבאפר כ-LPVOID.
7. בדיקת כשלים: כל פעולה מחזירה ערך שמציין הצלחה או כשלון, ויש לבדוק אותו.
שימו לב
המרצה מציין שהפוינטר של הקובץ נשמר בין קריאה לכתיבה, וכשמבצעים כתיבה ואז קריאה באותו Handle צריך לדעת איפה הוא נמצא.

פרקי ההרצאה: Write File

  1. 00:00

    תרגיל כתיבה לקובץ עם WriteFile

  2. 00:45

    פרמטרי WriteFile: באפר וכמות בתים

  3. 02:02

    מחרוזות ASCII מול Unicode

  4. 04:06

    מונה הבתים שנכתבו בפועל

  5. 05:46

    מציאת הקובץ שנוצר בפרויקט

  6. 06:45

    קריאה מהקובץ עם ReadFile

  7. 07:48

    באפר לקריאה והמרה למצביע void

  8. 10:14

    למה הקריאה לא מילאה את הבאפר

תמלול ההרצאה: Write File

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

  1. 00:05

    טוב אז אנחנו ממשיכים בתרגיל של כתיבה לקובץ אז זה write file sample בואו נפתח את זה ונפתח בעצם נפתח את ה srn ישר מvisual studio זה יפה יפה אז יצרנו קובץ חדש הדבר הבא שאני רוצה לעשות זה לכתוב לקובץ בואו נקרא לwrite file לwrite file צריך להעביר את ה h file אז ניתן לו h file עכשיו הוא רוצה LP באפר לונג פוינטר לקונסטנט ווייד פוינטר

  2. 00:45

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

  3. 01:19

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

  4. 01:42

    בקיצור, בצורה זה איזשהו מנגנון אסינכרוני שלא מעניין אותנו לא היום טוב אז מה שאני רוצה זה להעביר לו את הבאפר אז אני רוצה לכתוב לו כמובן משהו אז מה אנחנו נכתוב לו long pointer לבאפר הייתי רוצה להעביר לו הלואו מושן יפה עכשיו שימו לב שwrite file

  5. 02:02

    היא לא write file w זאת אומרת אני תמיד כותב בלי w והוא לא משלים אותי ב w זאת אומרת הוא לא יודע מה זה טקסט אין פה str בסיפור הזה סתם באפר זה האמת היא שאני יכול לכתוב לו את הלו משה אין לי בעיה להעביר לו את הלו משה אם כי התוכנית הזו לא תתקמפל כי הוא לא יודע מה זה הסימן הזה אם אני אנסה עכשיו לקמפל את זה בוא ננסה רגע לקמפל ככה בוא נגיד לו 0 0 0 סגור

  6. 02:34

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

  7. 03:14

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

  8. 03:31

    אז אין בעיה להעביר את הלא מורשה, אז בואו נעביר את הלא מורשה, מה הבעיה? יפה, עכשיו כמה בית to write מתוך המערך הזה שאנחנו צריכים? בואו נגיד נכתוב רק את 1, 2, 3, 4, 5. יהיו רק 5 תווים לכתוב לכובד.

  9. 03:50

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

  10. 04:28

    ואני אעשה אותו שווה ל-0 כדי שכשהוא מעדכן אותו אנחנו נראה את זה בצורה ברורה number of control רווח יפה מאוד והאחרון באמת הוא יישאר 0 ואני כן רוצה לראות מה הפונקציה מחזירה אז אני אגיד לו פה בול control רווח אני עושה בול גדול

  11. 04:49

    כי זה מה שהפונקציה אמורה להשיב אם את יודעת בול גדול לא בול קטן תקפידו זה לא בשפת c++ זה בשפת c יכול להיות שהוא יקבל את זה אבל אני אוהב להיות קורס כי אני אוהב להיות נכון אני לא רוצה שהוא יקבל אני רוצה להיות מדוייק הוא רוצה בול גדול נותן לו בול גדול בול גדול b ואני יכול לקרוא בקלות לשם משתנה write file b write file שווה לזה בוא נגיד

  12. 05:19

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

  13. 05:49

    ל-write file פה שימו לב זכרו שהוא שם את הקובץ שלו כמו c-sharp ששם את הקובץ ליד האג זה ב-c-plus-plus אז הם שמים את הקובץ משום מה ליד הקוד ליד הc++ למיניהם הנה הc++ נותנים את הקובץ הוא לא נותן אז בסדר אז בואו נגיד לו תה ונגיד לו פשוט סיים ואז הוא אמור לשחרר ואז דאבל קליק יפה והנה הלו בדיוק בלי אפילו רווח אחרי זה יפה אז הצלחנו לכתוב לו קובץ יפה

  14. 06:39

    הדבר הבא שמעניין אותנו זה לקרוא מהקובץ. בואו נקרא מהקובץ. כדי לקרוא מהקובץ יש פונקציית API שנקראת readfile. יפה.

  15. 06:52

    ופה שוב נותנים לה את ה-hfile, קונטרול רווח. המתינו בבקשה. יפה. אז קונטרול רווח ו-hfile, enter.

  16. 07:04

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

  17. 07:16

    עכשיו אנחנו יודעים שזה בעצם מערך של תווים, אז אני אגיד לו char ונקרא לזה buff וזה יהיה מערך, אנחנו יודעים שזה בדיוק בגודל של 5, אז נגדיר את זה בדיוק בגודל של 5, אבל אני גם אאפס את זה, עכשיו באופן כללי לאפס מערך אפשר כך, אבל מערך של charים אפשר גם לאפס כך, יפה אז גם ככה אני יכול לאפס מערך של צ'ארים בואו נראה קונטרול שליף את הערך פה אני צריך

  18. 07:50

    לתת לו כן lp void מה יקרה אם אני אתן לו buff הרי buff זה לא מסוג lp void אבל אני יכול להעביר כל פוינטר buff זה כתובת של מערך שם של מערך הוא כתובת של אתר הראשון אני מעביר את הכתובת של אתר הראשון כתובת של היא מסוג צ'אר כוכבית וlp void זה וולט כוכבית כל דבר כוכבית אני יכול להעביר איפה שמתבקש וולט כוכבית לכן זה יעבור יופי ו-number of

  19. 08:22

    bytes to read כמה בתים לקרוא לזה בדיוק 5 ו-number of bytes read כמה בתים הוא באמת קרא אז בואו נגדיר משתנה number of bytes read אז dword control רווח enter number of bytes read אני אאפס אותו כדי שנראה את זה, קצת קל לי לדבק, לראות אם הוא מחזיר, הרי מי שמקבל את זה, מי שהריד פייל עלול לא לעדכן את זה

  20. 08:55

    ולהשאיר את זה מזובל, אבל אם זה 0 והוא לא מעדכן את זה אני אראה שזה נשאר 0 אם זה מזובל קשה יהיה לזכור מה זה היה, מה זה נשאר, הרבה יותר קל לראות ש-0 נשאר 0 מאשר fd 0.0057 נשאר אותו מספר, בקיצור תמיד לאפס תמיד תמיד אפס ונאמבר number of byte red קונטרול רווח זה 0 אנחנו בהמשך נלמד על האוברלאפ והוא

  21. 09:32

    רוצה בול אז גם כאן נגדיר בול קונטרול רווח enter בול מה b וקונטרול שיפט חצי ימין וקונטרול v רווח שווה יפה ובצע, no מה הבעיה? קילט קונוורט, מה קילט קונוורט? קילט קונוורט, אולי יש איזושהי בעיה בסך הכל?

  22. 10:00

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

  23. 10:23

    השאלה היא מה יש בבאף? 0, 0, 0, number of bytes read, 0. הוא לא הצליח לקרוא מן הקובץ. רגע, רגע, רגע. ו-hfile יש לנו.

  24. 10:39

    writefile הצליחה. readfile הצליחה. הוא הצליח לקרוא מזה, הוא לא מילא לנו כלום. אמרנו לו 5, ומבחינתו, כאילו ביקשנו שהוא יקרא 0 תווים.

  25. 10:54

    בואו נראה את הקובץ, זה הקובץ הישן הזה. הקובץ החדש לא אמור להיות שונה, הוא לא נותן לראות. אז למה באף הוא במצב הזה? למה אין בו תווים?

לקורס המלא: קורס C למתקדמים אונליין

ההרצאה הקודמת: Create File

ההרצאה הבאה: בניית חלון מאפס

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

  • Write and Read Binary File
  • Begin Write Tests
  • Importing File
  • Configuration File

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

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