קבצי INI הם קבצים מבוססי טקסט המשמשים לאחסון נתוני התצורה של היישום.
למרות ש חלונות ממליץ להשתמש ברישום Windows לאחסון נתוני תצורה ספציפיים ליישום, במקרים רבים תגלה שקבצי INI מספקים דרך מהירה יותר לתוכנית לגשת להגדרות שלה. Windows עצמו אפילו משתמש בקבצי INI; desktop.ini ו boot.ini להיות רק שתי דוגמאות.
שימוש פשוט אחד בקבצי INI כמנגנון שמירת סטטוס יהיה שמירת הגודל והמיקום של הטופס אם ברצונך שטופס יופיע שוב במיקומו הקודם. במקום לחפש שלם מאגר המידע כדי למצוא את הגודל או המיקום, במקום זאת משתמשים בקובץ INI.
תבנית הקובץ INI
קובץ אתחול או הגדרת תצורה (.INI) הוא קובץ טקסט עם מגבלה של 64 KB המחולקת לקטעים שכל אחד מהם מכיל אפס או יותר מקשים. כל מקש מכיל אפס או יותר ערכים.
להלן דוגמא:
[חתך שם]
keyname1 = ערך
;תגובה
keyname2 = ערך
שמות מדורים כלולים בסוגריים מרובעים וחייבים להתחיל בתחילת קו. שמות קטעים ומפתחות אינם רגישים בין המקרים (המקרה לא משנה) ואינם יכולים להכיל תווי מרווח. ה שם מפתח אחריו סימן שווה ("="), מוקף אופציונלי בתווים מרווחים, שמתעלמים מהם.
אם אותו סעיף מופיע לא פעם באותו קובץ, או אם אותו מפתח מופיע לא פעם באותו סעיף, אז המופע האחרון שורר.
מפתח יכול להכיל מחרוזת, מספר שלם או בוליאניערך.
דלפי IDE משתמש בתבנית קובץ INI במקרים רבים. לדוגמה, קבצי .DSK (הגדרות שולחן עבודה) משתמשים בפורמט INI.
TIniFile Class
דלפי מספקת את TIniFile הכיתה, שהוכרזה ב inifiles.pas יחידה, עם שיטות לאחסון ואחזור ערכים מקבצי INI.
לפני שאתה עובד בשיטות TIniFile, עליך ליצור מופע של הכיתה:
שימושים inifiles;
...
var
IniFile: TIniFile;
התחל
IniFile: = TIniFile. צור ('myapp.ini');
הקוד שלמעלה יוצר אובייקט IniFile ומקצה את 'myapp.ini' לנכס היחיד של הכיתה - ה- מאפיין FileName - משמש לציין את שם קובץ ה- INI בו אתה משתמש.
הקוד כפי שנכתב לעיל מחפש את myapp.ini קובץ ב- \ חלונות ספרייה. דרך טובה יותר לאחסן נתוני יישומים היא בתיקיית היישום - פשוט ציין את שם הנתיב המלא של הקובץ עבור הקובץ צור שיטה:
// מקם את ה- INI בתיקיית היישום,
// תן לזה את שם היישום
// ו- 'ini' להרחבה:
iniFile: = TIniFile. צור (ChangeFileExt (יישום. ExeName, '. Ini'));
קריאה מ- INI
בכיתה TIniFile יש כמה שיטות "לקרוא". ה- ReadString קורא א ערך מחרוזת ממפתח, ReadInteger. ReadFloat ודומיהם משמשים לקריאת מספר ממפתח. לכל שיטות ה"קריאה "יש ערך ברירת מחדל שניתן להשתמש בהן אם הערך אינו קיים.
לדוגמה, ה- ReadString מוכרז כ:
פונקציה ReadString (const מדור, זהות, ברירת מחדל: מחרוזת): מחרוזת; לבטל;
כתוב ל- INI
ל- TIniFile יש שיטת "כתוב" המתאימה לכל שיטה "לקרוא". הם WritString, WritBool, WritInteger וכו '.
לדוגמה, אם אנו רוצים שתוכנית תזכור את שמו של האדם האחרון שהשתמש בה, מתי היה, ומה היו קואורדינטות הצורה העיקרית, אנו עשויים להקים קטע שנקרא משתמשים, מילת מפתח בשם אחרון, תאריך כדי לעקוב אחר המידע, וכן קטע שנקרא מיקום עם מפתחות חלק עליון, שמאלה, רוחב, ו גובה.
project1.ini
[משתמש]
אחרון = זרקו גאג'יץ '
תאריך = 01/29/2009
[מיקום]
למעלה = 20
שמאל = 35
רוחב = 500
גובה = 340
שים לב שהמפתח בשם אחרון מחזיק ערך מחרוזת, תאריך מחזיק ערך TDateTime, וכל המפתחות ב- מיקום החלק מחזיק ערך שלם.
האירוע OnCreate של הטופס הראשי הוא המקום המושלם לאחסן את הקוד הדרוש לגישה לערכים בקובץ האתחול של היישום:
תהליך TMainForm. FormCreate (שולח: TObject);
var
appINI: TIniFile;
LastUser: מחרוזת;
LastDate: TDateTime;
התחל
appINI: = TIniFile. צור (ChangeFileExt (יישום. ExeName, '. Ini'));
נסה
// אם אף משתמש אחרון לא מחזיר מחרוזת ריקה
LastUser: = appINI.ReadString ('משתמש', 'אחרון', '');
// אם אין תאריך אחרון חוזר לתאריך של ימינו
LastDate: = appINI.ReadDate ('משתמש', 'תאריך', תאריך);
// הצג את ההודעה
ShowMessage ('תוכנית זו שימשה בעבר על ידי' + LastUser + 'ב-' + DateToStr (LastDate));
למעלה: = appINI.ReadInteger ('מיקום', 'למעלה', למעלה);
שמאל: = appINI.ReadInteger ('מיקום', 'שמאל', שמאל);
רוחב: = appINI.ReadInteger ('מיקום', 'רוחב', רוחב);
גובה: = appINI.ReadInteger ('מיקום', 'גובה', גובה);
סוף סוף
appINI. חינם;
סוף;
סוף;
האירוע OnClose של הטופס הראשי הוא אידיאלי עבור שמור את INI חלק מהפרויקט.
תהליך TMainForm. FormClose (שולח: TObject; var פעולה: TCloseAction);
var
appINI: TIniFile;
התחל
appINI: = TIniFile. צור (ChangeFileExt (יישום. ExeName, '. Ini'));
נסה
appINI.WriteString ('משתמש', 'אחרון', 'זרקו גאג'יץ');
appINI.WriteDate ('משתמש', 'תאריך', תאריך);
עם appINI, MainForm לעשות
התחל
WriteInteger ('מיקום', 'למעלה', למעלה);
WriteInteger ('מיקום', 'שמאל', שמאל);
WriteInteger ('מיקום', 'רוחב', רוחב);
WriteInteger ('מיקום', 'גובה', גובה);
סוף;
סוף סוף
יישום. חינם;
סוף;
סוף;
מדורי INI
ה מחק מוחק קטע שלם מקובץ INI. ReadSection ו ReadSections מלא אובייקט TStringList בשמות כל החלקים (ושמות המפתח) בקובץ INI.
INI מגבלות ומורדות
בכיתה TIniFile משתמשים ממשק ה- API של Windows אשר מטיל מגבלה של 64 KB על קבצי INI. אם אתה צריך לאחסן יותר מ- 64 KB של נתונים, עליך להשתמש ב- TMemIniFile.
בעיה נוספת עשויה להיווצר אם יש לך קטע עם יותר מ 8 K ערך. אחת הדרכים לפתור את הבעיה היא לכתוב גרסה משלך לשיטת ReadSection.