נושאים פעיליםנושאים פעילים  הצגת רשימה של חברי הפורוםרשימת משתמשים  חיפוש בפורוםחיפוש  עזרהעזרה
  הרשמההרשמה  התחברותהתחברות RSS עדכונים
תיכנות
RSS UnderWarrior Forums : RSS תיכנות
נושא

נושא: קבצים בינאריים ב-C++

שליחת תגובהשליחת נושא חדש
כותב
הודעה << נושא קודם | נושא הבא >>
ReX :D
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 19 August 2006 בשעה 22:15 | IP רשוּם
ציטוט ReX :D

האם ניתן להכניס כמה מחלקות ביחד לאותו קובץ בינארי?
כי אני יודע שבאמצעות
ofstream write
אפשר להכניס מחלקה לקובץ בינארי
אבל האם אפשר להכניס כמה מחלקות שונות
ולקרוא כל אחד בנפרד?
חזרה לתחילת העמוד הצג את כרטיס החבר של ReX :D חפש הודעות אחרות של ReX :D בקר בדף הבית של ReX :D
 
eliranhadad
משתמש מתחיל
משתמש מתחיל


הצטרף / הצטרפה: 16 August 2006
משתמש: מנותק/ת
הודעות: 20
נשלח בתאריך: 20 August 2006 בשעה 09:08 | IP רשוּם
ציטוט eliranhadad

בעיקרון כן.

ofstream היא מחלקה המוגדרת כחלק מתקן ה- STL (standart tempate libary(/

הפונקציה write שלה מקבלת באפר וגודל.

אתה יכול לכתוב לתוך הקובץ הבינארי ככל העולה על דעתך (כולל 1000 מחלקות), רק תזכור שבטעינת המחלקות אתה צריך להתחשב בדרך שכתבת אותן לתוך הקובץ.

 

לכן, באופן כללי, עדיף שכל קובץ יכיל מחלקה יחידה.

חזרה לתחילת העמוד הצג את כרטיס החבר של eliranhadad חפש הודעות אחרות של eliranhadad
 
ReX :D
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 20 August 2006 בשעה 09:19 | IP רשוּם
ציטוט ReX :D

האם אתה יכול להראות לי קוד דוגמא שטוען 2 מחלקות לאותו קובץ
וגם קורא אותם?
חזרה לתחילת העמוד הצג את כרטיס החבר של ReX :D חפש הודעות אחרות של ReX :D בקר בדף הבית של ReX :D
 
eliranhadad
משתמש מתחיל
משתמש מתחיל


הצטרף / הצטרפה: 16 August 2006
משתמש: מנותק/ת
הודעות: 20
נשלח בתאריך: 20 August 2006 בשעה 09:24 | IP רשוּם
ציטוט eliranhadad

אין כאן הרבה בעיות.

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

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

בד"כ לכל מחלקה יש שיטה read & write (שמוזמנות לפעמים מהבנאי ומהמפרק ב- C++). אז אם אתה עובד ב- C++ אתה לא תוכל להפעיל את הטעינה של המחלקה השנייה למשל בלי שעשית את הקריאה של הראשונה (כלומר המחלקות חייבות להיקרא אחת אחרי השנייה מה שמעיד אולי על צורך במחלקה אחת ולא בשתיים).

חזרה לתחילת העמוד הצג את כרטיס החבר של eliranhadad חפש הודעות אחרות של eliranhadad
 
ReX :D
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 20 August 2006 בשעה 09:59 | IP רשוּם
ציטוט ReX :D

כן אבל אני ביקשתי את המידע הזה בשביל לטפל בבעיה
בשביל מסד נתונים
אני פשוט מכניס אותה מחלקה אחת אחרי השניה
ואז קורא אחת אחת
למשל אם יש לי מחלקה Data
אני מכניס אותה הרבה פעמים
ואז שאני פותח את התוכנית, זה טוען עם המסד נתונים..
ד"א איך אני בודק אם אין עוד מה לקרוא?
חזרה לתחילת העמוד הצג את כרטיס החבר של ReX :D חפש הודעות אחרות של ReX :D בקר בדף הבית של ReX :D
 
eliranhadad
משתמש מתחיל
משתמש מתחיל


הצטרף / הצטרפה: 16 August 2006
משתמש: מנותק/ת
הודעות: 20
נשלח בתאריך: 20 August 2006 בשעה 10:08 | IP רשוּם
ציטוט eliranhadad

ראשית. המלצה שלי:

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

ליצור מחלקה הנקראת )DataManager) שתכיל רשימה מקושרת של כל המחלקות (אפשר בעזרת הרשימה המקושרת המוגדרת ב- stl מאוד פשוט ונוח).

ואז מה שאתה צריך לבסוף זה לקרוא לפונקציה write של אותה רשימה מקושרת (ואז תבנה פונקציה write בכל מחלקה ותעבור אולי בלולאה דרך איטרטור).

לגבי הבעיה השניה. פיתרון ראשון זה להגדיר בתוך המחלקה לעיל שדה אורך (שמוגדר כבר בתוך stl::list) ואז להדפיס את השדה הזה בהתחלה ולעבור בלולאה לפיו. פיתרון שני שעדיף שיעשה ביחד עם הראשון זה בעזרת תו הסיום- EnfOfFile (EOF). מה גם שהפונקציה read בתוך stl::ofstream מחזירה את מספר הבתים שנקראו, אפשר לבדוק מתי ערך זה קטן או שווה ל- 0.

בהצלחה!

חזרה לתחילת העמוד הצג את כרטיס החבר של eliranhadad חפש הודעות אחרות של eliranhadad
 

אם ברצונך להגיב לנושא זה עליך קודם להתחבר
אם אינך רשום/ה כבר עליך להרשם

  שליחת תגובהשליחת נושא חדש
גרסת הדפסה גרסת הדפסה

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