כתוב קובץ בינארי ב-C++

Ktwb Qwbz Byn Ry B C



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

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

כתוב קובץ בינארי באמצעות C++

כדי לשמור את הנתונים בקובץ בינארי באמצעות C++, נעשה שימוש בשיטת write() . פונקציה זו כותבת מספר מוגדר של בתים לזרם המיועד, המתחיל במיקום של מצביע ה-'put'. אם מצביע ה-'put' נמצא בסוף, הקובץ מורחב. עם זאת, הנתונים החדשים מחליפים את התווים הקיימים אם המצביע נמצא בתוך הקובץ. במקרה של שגיאה במהלך תהליך הכתיבה, הזרם מסומן כנמצא במצב שגיאה. כעת, הבה נעבור לדוגמאות כדי ללמוד כיצד לכתוב בקובץ בינארי באמצעות כמה פונקציות פשוטות ומובנות ב-C++.







שיטה 1: כתיבת קבצים בינאריים עם נתונים מובנים

ייתכן שיהיה עליך לכתוב מידע מובנה, כגון מבנים מותאמים אישית, לקובץ בינארי במקרים רבים. הבה נבחן דוגמה המכילה תיעוד של אדם הכולל את השם, הגובה והגיל של אדם. ראה את הקוד הבא ועיין בהסבר:



#include

#include

struct אדם {

לְהַשְׁחִיר שֵׁם [ חמישים ] ;

int גיל ;

לְהַכפִּיל גוֹבַה ;

} ;

int רָאשִׁי ( ) {

סטד :: אוסטרים outFile ( 'people.bin' , סטד :: ios :: בינארי ) ;

אם ( ! outFile. פתוח ( ) ) {

סטד :: cerr << 'שגיאה! לא ניתן לפתוח קובץ לכתיבה!' << סטד :: endl ;

לַחֲזוֹר 1 ;

}

אדם אדם1 = { 'קלסום איליאס' , 25 , 1.75 } ;

אדם אדם2 = { 'קלסום בג'ווה' , 30 , 1.68 } ;

outFile. לִכתוֹב ( לפרש_קאסט מחדש < לְהַשְׁחִיר *> ( & אדם 1 ) , מידה של ( אדם 1 ) ) ;

outFile. לִכתוֹב ( לפרש_קאסט מחדש < לְהַשְׁחִיר *> ( & אדם2 ) , מידה של ( אדם2 ) ) ;

outFile. סגור ( ) ;

סטד :: cout << 'הרשומה של האדם נכתבה לקובץ בינארי בהצלחה.' << סטד :: endl ;

לַחֲזוֹר 0 ;

}

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



  • שֵׁם: מחרוזת לאחסון שם האדם (עד 50 תווים)
  • גיל: מספר שלם לאחסון גילו של האדם
  • גוֹבַה: כפולה לאחסון הגובה של האדם

לאחר הגדרת מבנה 'אדם', מתחילה הפונקציה הראשית שהיא נקודת הכניסה של התוכנית. השורה הראשונה בתוכנית הראשית פותחת קובץ בשם 'people.bin'. אנו משתמשים ב-'std::ofstream' כדי ליצור קובץ בשם 'people.bin' לכתיבת הנתונים בפורמט בינארי. חשוב מאוד לבדוק אם הקובץ נפתח בהצלחה. אחרת, תוצג הודעת שגיאה והתוכנית נעצרת. לפיכך, בעזרת התנאי 'if' והפונקציה is_open() אנו בודקים האם הקובץ נפתח בהצלחה או לא.





כאן נוצרים שני האובייקטים 'אדם'. אנו מגדירים שני משתנים, 'אדם1' ו'אדם2', מסוג 'אדם'. אנו מקצים את ערכי שם המשתנה, הגיל והגובה עבור 'Kalsoom Ilyas' ו-'Kalsoom Bajwa'.

כעת, כשיש לנו את הנתונים לכתוב בקובץ בינארי, תנו לנו לבצע את הפונקציה בפועל עם הפונקציה write(). אנו משתמשים ב-'outFile.write' כדי לכתוב את התוכן של כל אובייקט 'אדם' לקובץ. ה-'reinterpret_cast(&person1)' ו-'reinterpret_cast(&person2)' ממירים את כל מבנה ה-'Person' (כולל כל השדות שלו) לזרם רציף של בתים המתאים לכתיבה לקובץ הבינארי . אנו כותבים את הגודל של כל אובייקט 'אדם' באמצעות ה-'sizeof(person1)' ו-'sizeof(person2)' כדי להבטיח שכל הנתונים נכתבים בצורה נכונה.



לאחר כתיבת הנתונים על הקובץ, חשוב מאוד לסגור אותו כראוי כדי שלא יאבדו נתונים עקב פונקציה אחרת. אנו משתמשים ב-outFile.close() כדי לשחרר את המשאבים המשויכים לקובץ ולהבטיח שהנתונים נכתבים בצורה מדויקת. לבסוף, אנו מדפיסים הודעה המאשרת את הכתיבה המוצלחת של הנתונים לקובץ הבינארי.

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

שיטה 2: כתיבת מספרים שלמים לקובץ בינארי

בשיטה זו, מערך של מספרים שלמים נכתב לקובץ בינארי בשם 'integers.bin'. ה-'reinterpret_cast' מתייחס למערך המספרים השלמים כרצף של תווים (בתים) לכתיבה לקובץ. זה חשוב במיוחד מכיוון שקבצים בינאריים עוסקים בנתוני בתים גולמיים. הבה נסתכל על הדוגמה הפשוטה הבאה:

#include

#include

int רָאשִׁי ( ) {

סטד :: אוסטרים outFile ( 'integers.bin' , סטד :: ios :: בינארי ) ;

אם ( ! outFile. פתוח ( ) ) {

סטד :: cerr << 'שגיאה! לא ניתן לפתוח קובץ לכתיבה!' << סטד :: endl ;

לַחֲזוֹר 1 ;

}

int מספרים [ ] = { 42 , 99 , - 1 , 0 } ;

outFile. לִכתוֹב ( לפרש_קאסט מחדש < לְהַשְׁחִיר *> ( מספרים ) , מידה של ( מספרים ) ) ;

outFile. סגור ( ) ;

סטד :: cout << 'המספרים השלמים הנתונים נכתבו לקובץ בינארי בהצלחה.' << סטד :: endl ;

לַחֲזוֹר 0 ;

}

להלן פירוט של הקוד עם הפרטים הספציפיים:

ה-'#include ' ו-'#include ' מביאים את הכלים הדרושים לעבודה עם קבצים והדפסת ההודעות כמו cin ו-write(), בהתאמה. ה-'std::ofstream outFile('integers.bin', std::ios::binary);' פותח קובץ בינארי בשם 'integers.bin' שיכול לאחסן רק את המספרים בקוד סודי (פורמט בינארי). זה בודק אם הקובץ פתוח. אחרת, ניתנת הודעת שגיאה.

השורה הבאה שהיא 'int numbers[] = {42, 99, -1, 0};' מגדיר מערך בשם 'מספרים' עם מספרים שלמים 42, 99, -1 ו-0. ה-'outFile.write(reinterpret_cast(numbers), sizeof(numbers));' מתרגם בזהירות את המספרים השלמים לפורמט הבינארי וכותב אותם בקובץ 'integer.bin'. הקובץ 'outFile.close();' סוגר את הקובץ בצורה נכונה כדי לשמור על המספרים השלמים בטוחים ומאורגנים. לבסוף, מודפסת הודעה כדי לאשר שהמספרים השלמים אוחסנו בהצלחה בקובץ הבינארי. עיין בפלט הבא של תוכנית זו כדי לראות את התוצאה:

סיכום

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