Πώς να χειριστείτε αρχεία INI από τους Δελφούς

Τα αρχεία INI είναι αρχεία με βάση το κείμενο που χρησιμοποιούνται για την αποθήκευση δεδομένων διαμόρφωσης μιας εφαρμογής.

Αν και Windows συνιστά τη χρήση του Μητρώου των Windows για την αποθήκευση δεδομένων ρύθμισης για συγκεκριμένες εφαρμογές, σε πολλές περιπτώσεις, θα διαπιστώσετε ότι τα αρχεία INI παρέχουν έναν πιο γρήγορο τρόπο πρόσβασης στο πρόγραμμα. Τα ίδια τα Windows χρησιμοποιούν αρχεία INI. desktop.ini και boot.ini που είναι μόνο δύο παραδείγματα.

Μια απλή χρήση των αρχείων INI ως μηχανισμός εξοικονόμησης κατάστασης θα ήταν να αποθηκεύσετε το μέγεθος και τη θέση μιας φόρμας εάν θέλετε μια φόρμα να επανεμφανιστεί στην προηγούμενη θέση της. Αντί να ψάχνεις μέσα από ένα σύνολο βάση δεδομένων για να βρείτε το μέγεθος ή την τοποθεσία, χρησιμοποιείται ένα αρχείο INI.

Η μορφή αρχείου INI

Το αρχείο ρυθμίσεων αρχικοποίησης ή ρυθμίσεων διαμόρφωσης (.INI) είναι ένα αρχείο κειμένου με όριο 64 KB χωρισμένο σε τμήματα, το καθένα από τα οποία περιέχει μηδέν ή περισσότερα κλειδιά. Κάθε πλήκτρο περιέχει μηδέν ή περισσότερες τιμές.

instagram viewer

Ακολουθεί ένα παράδειγμα:

 [SectionName]
keyname1 = τιμή
;σχόλιο
keyname2 = τιμή

Τα ονόματα των τμημάτων περικλείονται σε αγκύλες και πρέπει να ξεκινούν από την αρχή μιας γραμμής. Τα τμήματα και τα ονόματα των πλήκτρων είναι ανύπαρκτα σε πεζά (η υπόθεση δεν έχει σημασία) και δεν μπορεί να περιέχει χαρακτήρες διαστήματος. ο όνομα κλειδιού ακολουθείται από ένα ίση πινακίδα ("="), προαιρετικά περιβαλλόμενο από χαρακτήρες διαχωρισμού, οι οποίοι αγνοούνται.

Εάν το ίδιο τμήμα εμφανίζεται περισσότερες από μία φορές στο ίδιο αρχείο ή εάν το ίδιο κλειδί εμφανίζεται περισσότερες από μία φορές στην ίδια ενότητα, τότε επικρατεί το τελευταίο περιστατικό.

Ένα κλειδί μπορεί να περιέχει σειρά, ακέραιος, ή booleanαξία.​

Δελφοί Το IDE χρησιμοποιεί τη μορφή αρχείου INI σε πολλές περιπτώσεις. Για παράδειγμα, .DSK αρχεία (ρυθμίσεις επιφάνειας εργασίας) χρησιμοποιούν τη μορφή INI.

Κατηγορία TIniFile

Ο Δελφός παρέχει το TIniFile κατηγορίας, που δηλώνεται στο inifiles.pas μονάδα, με μεθόδους αποθήκευσης και ανάκτησης τιμών από αρχεία INI.

Πριν από την εργασία με τις μεθόδους TIniFile, πρέπει να δημιουργήσετε μια εμφάνιση της κλάσης:

χρήσεις inifiles;
...
var
IniFile: TIniFile;
ξεκινήσει
IniFile: = TIniFile. Δημιουργία ('myapp.ini');

Ο παραπάνω κώδικας δημιουργεί ένα αντικείμενο IniFile και εκχωρεί το 'myapp.ini' στην μοναδική ιδιότητα της κλάσης - το PropertyName -Χρησιμοποιήθηκε για να καθορίσετε το όνομα του αρχείου INI που πρόκειται να χρησιμοποιήσετε.

Ο κώδικας όπως γράφτηκε παραπάνω αναζητά το myapp.ini αρχείου στο \ Windows Ευρετήριο. Ένας καλύτερος τρόπος αποθήκευσης των δεδομένων εφαρμογής είναι στον φάκελο της εφαρμογής - ορίστε ακριβώς το πλήρες όνομα διαδρομής του αρχείου για το Δημιουργώ μέθοδος:

// τοποθετήστε το INI στο φάκελο της εφαρμογής,
// αφήστε το όνομα της εφαρμογής
// και 'ini' για επέκταση:

iniFile: = TIniFile. Δημιουργία (ChangeFileExt (Εφαρμογή. ExeName, '. Ini')).

Ανάγνωση από INI

Η κλάση TIniFile έχει πολλές μεθόδους "ανάγνωσης". Το ReadString διαβάζει α τιμή συμβολοσειράς από ένα κλειδί, ReadInteger. Το ReadFloat και παρόμοια χρησιμοποιούνται για να διαβάσουν έναν αριθμό από ένα κλειδί. Όλες οι μέθοδοι "ανάγνωσης" έχουν μια προεπιλεγμένη τιμή που μπορεί να χρησιμοποιηθεί αν η καταχώριση δεν υπάρχει.

Για παράδειγμα, το ReadString δηλώνεται ως:

λειτουργία ReadString (const Ενότητα, Αναγνωριστικό, Προεπιλογή: Χορδές): Χορδή. καταπατώ;

Γράψτε στο INI

Το TIniFile έχει μια αντίστοιχη μέθοδο "εγγραφής" για κάθε μέθοδο "ανάγνωσης". Αυτά είναι WriteString, WriteBool, WriteInteger, κλπ.

Για παράδειγμα, αν θέλουμε ένα πρόγραμμα να θυμάται το όνομα του τελευταίου χρήστη που το χρησιμοποίησε, όταν ήταν και ποιες ήταν οι κύριες συντεταγμένες της φόρμας, θα μπορούσαμε να δημιουργήσουμε μια ενότητα που ονομάζεται Χρήστες, μια λέξη-κλειδί που ονομάζεται τελευταίος, Ημερομηνία για την παρακολούθηση των πληροφοριών, και μια ενότητα που ονομάζεται Τοποθέτηση με τα πλήκτρα Μπλουζα, Αριστερά, Πλάτος, και Υψος.

project1.ini
[Χρήστης]
Τελευταία = Zarko Gajic
Ημερομηνία = 01/29/2009
[Τοποθέτηση]
Κορυφή = 20
Αριστερά = 35
Πλάτος = 500
Ύψος = 340

Σημειώστε ότι το κλειδί που ονομάζεται τελευταίος διατηρεί μια τιμή συμβολοσειράς, Ημερομηνία διατηρεί μια τιμή TDateTime και όλα τα πλήκτρα στο Τοποθέτηση ενότητα κρατήστε μια ακέραια τιμή.

Το συμβάν OnCreate της κύριας φόρμας είναι το ιδανικό μέρος για την αποθήκευση του κωδικού που απαιτείται για την πρόσβαση στις τιμές στο αρχείο αρχικοποίησης της εφαρμογής:

διαδικασία TMainForm. FormCreate (αποστολέας: TObject);
var
appINI: TIniFile;
LastUser: συμβολοσειρά;
Τελευταία ημερομηνία: 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.Free;
τέλος;
τέλος;

Το συμβάν OnClose της κύριας φόρμας είναι ιδανικό για το Αποθήκευση INI μέρος του σχεδίου.

διαδικασία TMainForm. FormClose (αποστολέας: TObject; var Δράση: TCloseAction);
var
appINI: TIniFile;
ξεκινήσει
appINI: = TIniFile. Δημιουργία (ChangeFileExt (Εφαρμογή. ExeName, '. Ini')).
δοκιμάστε
appINI.WriteString ('Χρήστης', 'Τελευταία', 'Zarko Gajic').
appINI.WriteDate ('Χρήστης', 'Ημερομηνία', Ημερομηνία);
με appINI, MainForm κάνω
ξεκινήσει
WriteInteger ('Τοποθέτηση', 'Αρχή', Αρχή);
WriteInteger ('τοποθέτηση', 'αριστερά', αριστερά);
WriteInteger ('τοποθέτηση', 'πλάτος', πλάτος);
WriteInteger ('Τοποθέτηση', 'Ύψος', Ύψος);
τέλος;
τελικά
appini. Ελεύθερος;
τέλος;
τέλος;

INI τμήματα

ο EraseSection διαγράφει ολόκληρο το τμήμα ενός αρχείου INI. ReadSection και ReadSections συμπληρώστε ένα αντικείμενο TStringList με τα ονόματα όλων των ενοτήτων (και τα ονόματα κλειδιών) στο αρχείο INI.

Περιορισμοί και μειονεκτήματα του INI

Χρησιμοποιείται η κλάση TIniFile το API των Windows που επιβάλλει ένα όριο 64 KB στα αρχεία INI. Εάν πρέπει να αποθηκεύσετε περισσότερα από 64 KB δεδομένων, θα πρέπει να χρησιμοποιήσετε το TMemIniFile.

Ένα άλλο πρόβλημα μπορεί να προκύψει εάν έχετε μια ενότητα με τιμή μεγαλύτερη από 8 K. Ένας τρόπος για να λύσετε το πρόβλημα είναι να γράψετε τη δική σας έκδοση της μεθόδου ReadSection.

instagram story viewer