Glengamoi (Forum) · AspHeute · .NET Heute (RSS-Suche) · AspxFiles (Wiki) · .NET Blogs
ASP German Homepage Homepage
 

Liste

.NET 2.0 (1)
.NET Allgemein (16)
.NET Fu (5)
ADO.NET (11)
Aprilscherz (3)
ASP Grundlagen (44)
ASP Tricks (83)
ASP.NET (44)
ASPIntranet.de (5)
C# (28)
Datenbank (44)
Dokumentation (4)
IIS 6.0 (1)
Komponenten (29)
Optimierung (10)
Server (21)
Sicherheit (34)
Tee Off (6)
VB.NET (6)
WAP (8)
Web Services (11)
XML (9)

RSS 2.0 - Die neuesten fünf Artikel auf AspHeute.com


 

Suchen





 

English Articles
Chinese Articles
Unsere Autoren
 
Link zu AspHeute
Impressum
Werben
Anfragen

INI-Dateien als Konfigurationsdateien für ASP-Anwendungen verwenden

Geschrieben von: Steffen Kangowski
Kategorie: ASP Tricks

Wie schon im Artikel Lesen von Textdateien von Christian Koller angeschnitten, bieten sich Textdateien an, um Konfigurationsdaten für eine ASP-Anwendung abzulegen und bei Bedarf auszulesen.

Eine solche Verfahrensweise bietet sich beispielsweise dann an, wenn Anwendungen distribuiert werden sollen. Solche Anwendungen werden oftmals verschlüsselt weitergegeben und es besteht dann der Wunsch Basiskonfigurationsdaten dem Betreiber transparent und editierbar zur Verfügung zu stellen. Ein anderes Beispiel wäre, wenn Konfigurationsdaten, unabhängig von der Verfügbarkeit einer Datenbank, der Anwendung zur Verfügung gestellt werden sollen.

Wie aber könnte eine solche Konfigurationsdatei aussehen und wie greife ich gezielt auf einen gewünschten Eintrag zu? Wie kann man gleichartige Konfigurationsdaten trennen? Wie kann ich Daten unabhängig der Verwendung von Variablen und Konstanten so ablegen? Und wie kann ich absichern, daß wenn ein Wert nicht vorhanden ist, meine Anwendung weiterarbeiten kann?

Fragen über Fragen. Die Antwort darauf könnte die Verwendung von INI-Dateien sein. Vielleicht erinnert sich der eine oder andere noch an die sogenannten INI-Dateien, die unter Windows 3.x massenhaft verwendet wurden und erst mit der Einführung von Windows9x und der Registrierungsdatenbank an Bedeutung verloren haben.

Der große Vorteil von INI-Dateien besteht unter anderem:

  • im einheitlichen Aufbau von INI-Dateien
  • in der einheitlichen Ablage von Schlüsselwörtern und zugehörigen Werten, z.B.:
    BackgroundColor = #c0c0c0
  • in der Trennung von Konfigurationsdaten in logische Abschnitte und der expliziten Zuordnung von Schlüsselwörtern zu Abschnitten. Dadurch können auch gleiche Schlüsselwörter verschiedenen Abschnitten zugeordnet werden. Beispielsweise:
    [FarbSchemaGelb]
    BackgroundColor = #ffff00
    [FarbSchemaRot]
    BackgroundColor = #ff0000
  • der Möglichkeit Kommentare einzufügen
    ; dies ist ein Kommentar

Wie ist nun eine typische INI-Datei aufgebaut?

Eine INI-Datei besteht aus mindestens einem Abschnitt. Abschnitte werden durch symbolische Namen, die in eckige Klammern gefaßt sind, gekennzeichnet. Jedes Schlüsselwort und der zugehörige Wert stehen in jeweils einer Zeile. Schlüsselwörter stehen unterhalb des zugehörigen Abschnitts.

Das Schlüsselwort und der zugehörige Wert sind durch ein Gleichheitszeichen getrennt. Die Verwendung von mehr als einem Gleichheitszeichen in einer Zeile ist untersagt. Kommentare sind durch ein Semikolon vor dem ersten Textzeichen in der betreffenden Zeile zu kennzeichnen.

Hier nun ein vollständiges Beispiel einer INI-Datei beispiel.ini (finden Sie im Download):

; Ein Kommentar in der beispiel.ini

[AppLog]
VirtualLogPath = /meineapps/log/
SysLogEnable = true
LogPerMonth = true

[Interface1]
HeadColor = #0063ce
MainColor = #2C5BA5
FontColor = #84ADEB
TabSize = 400

[Interface2]
HeadColor = #2277ce
MainColor = #99ff99
FontColor = #84ADEB
TabSize = 250

Wie aber gelangen wir nun an die Werte in einer solchen INI-Datei?

Eine komfortable Funktion soll dabei helfen. Diese Funktion soll gezielt auf eine bestimmte INI-Datei zuzugreifen und den zugeordneten Wert eines bestimmten Schlüsselwortes in einem bestimmten Abschnitt zurückzugeben. Wenn das Schlüsselwort im angebenen Abschnitt nicht gefunden wurde, soll ein Default-Wert zurückgegeben werden. Diese Funktion heißt im Beispiel IniReadKey. Das vollständige Listing der Funktion finden Sie in der Datei (beispiel_ini.asp.

Nun zur Analyse der Funktion IniReadKey:

IniReadKey(IniFilename, IniSection, IniKey, DefaultValue)

Die Funktion erwartet vier Parameter:

  • IniFileName (String). Dies ist der Dateiname mit dem relativen Pfad bzw. dem physischen Pfad der INI-Datei Beispiel: "/appconfig.ini"
  • Der zweite Parameter ist IniSection (String), der Abschnitt der INI-Datei in der der Schlüssel gesucht werden soll. Beispiel: "Interface1"
  • IniKey (String), der Schlüssel dessen Wert gelesen werden soll. Beispiel: "MainColor"
  • DefaultValue (String), der Wert der zurückgegeben werden soll wenn der Schlüssel nicht gefunden wurde oder für den Schlüssel kein Wert vorhanden ist.

Ein Aufruf der Funktion sieht dann beispielweise so aus:

<%
MainColor = IniReadKey("c:\temp\appconfig.ini ","Interface1","MainColor","#c0c0c0")
%>

Nun zur eigentlichen Arbeitsweise der Funktion, Schritt für Schritt erklärt.

Function IniReadKey(IniFileName, IniSection, IniKey, DefaultValue)

Dim FileSystem, IniFile, FileName, ThisLine, ThisSection, _
                  ThisKey, FoundSection, TmpValue

If Instr(1,IniFileName,"\") > 0 Then
FileName = Trim(IniFileName)
Else 
FileName = Trim(server.mappath(IniFileName))
End If
IniSection = Trim(IniSection)
IniKey = Trim(IniKey)
DefaultValue = Trim(DefaultValue)

Als erstes überprüft die Funktion ob der übergebene Pfad ein physischer oder ein virtueller Pfad ist und wandelt gegebenenfalls den virtuellen Pfad in einen physischen Pfad um - und zwar mit Hilfe der Funktion server.mappath(). Weiterhin werden bei den anderen Parametern unnötige Leerzeichen entfernt.

Set FileSystem = _ 
   CreateObject("Scripting.FileSystemObject")
Set IniFile = _ 
   FileSystem.OpenTextFile(FileName,ForReading,TristateFalse)

Ein FileSystemObject Objekt wird erstellt und in in der Variable FileSystem gespeichert. Durch das FileSystemObject bekommt man Zugriff auf Dateien und Ordner, und wir verwenden das FileSystemObject um unsere INI Datei zum Lesen zu öffnen.

Do While NOT IniFile.AtEndOfStream
ThisLine = Trim(IniFile.Readline)
' Überprüfen ob aktuelle Zeile ein Abschnitt ist
If Instr(1, ThisLine, "[") > 0 Then
   'Abschnitt ja aber ob der richtige ?
   FoundSection = false
   'Überprüfen ob aktuelle Zeile der
   'richtige Abschnitt ist
   If Instr(1, ThisLine, IniSection) > 0 Then
     'OK Abschnitt gefunden, Flag auf true
     'setzen bis zum nächsten Abschnitt
     FoundSection = true
    End If
End If

Nun wird die INI-Datei Zeile für Zeile gelesen und nach einem Abschnitt gesucht, die ja allesamt durch eckige Klammern gekennzeichnet sind . Dazu wird jede gelesene Zeile mit Instr nach einer eckigen Klammer durchsucht. Wenn ein Abschnitt gefunden wurde, dann wird natürlich noch überprüft, ob es sich um den richtigen Abschnitt handelt.

If FoundSection Then
'prüfen ob Key in aktueller Zeile
	'UND nur weiter wenn rechts vom Key ein IstGleich-
'Zeichen steht UND nur weiter wenn kein
'Kommentarzeichen (Semikolon) vor Text
	If Instr(1, ThisLine, IniKey) > 0 AND Instr(Instr(1, ThisLine, IniKey) _
	   + Len(IniKey), ThisLine, "=") > 0 AND Left(ThisLine,1) <> ";" Then

Anschließend wird, wenn es sich tatsächlich um den richtigen Abschnitt handelt, überprüft ob in der aktuellen Zeile der INI-Datei der passende Schlüssel Parameter IniKey vorhanden ist, ob rechts vom Schlüssel ein Gleichheitszeichen steht und ob es sich bei der Zeile nicht um eine Kommentarzeile handelt. Wenn alle Bedingungen erfüllt sind wird die Schleife verlassen und der gelesene Wert zwischengespeichert.

    'Wert übertragen und Lesen beenden
     TmpValue = Trim(Mid(ThisLine,Instr(1, ThisLine, "=")+1))
    Exit Do
  End If
End If
Loop

Im Anschluß prüft die Funktion noch ob der gefundene Wert leer ist und übergibt gegebenenfalls den Default-Wert aus DefaultValue.

If TmpValue = "" OR IsEmpty(TmpValue)Then
IniReadKey = DefaultValue
Else 
	IniReadKey = TmpValue
End If
IniFile.Close
Set FileSystem = Nothing
Set IniFile = Nothing
End Function

Mit dieser Funktionalität hat man somit die Möglichkeit, sehr bequem und übersichlich zum Beispiel Konfigurationsdaten einer ASP-Anwendung abzulegen und darauf zuzugreifen.

Wichtig ist noch anzumerken, daß aus Sicherheitsgründen solche INI-Dateien unbedingt so im Dateisystem abgelegt werden sollten, daß Sie via Web nicht erreichbar sind und somit ein Download der INI-Dateien unmöglich ist. Deshalb sollte man mit dem Parameter IniFileName nach Möglichkeit immer physische Pfade übergeben.

Wer die Möglichkeit hat, Komponenten auf dem von ihm genutzten IIS zu installieren, kann natürlich auch auf Komponenten zurückgreifen, die bezüglich der Arbeit mit INI-Dateien ungleich mehr Komfort bieten. Ein Beispiel für eine solche Komponente ist SA-FileManager von Software Artisans.

Schlußbemerkung

Man kann nicht nur INI-Dateien lesen, sondern aus ASP heraus auch den Inhalt von INI-Dateien aktualisieren beziehungsweise neue INI-Dateien anlegen.

Download des Codes

Klicken Sie hier, um den Download zu starten.

Verwandte Artikel

Lesen von Textdateien

Wenn Sie jetzt Fragen haben...

Wenn Sie Fragen rund um die in diesem Artikel vorgestellte Technologie haben, dann schauen Sie einfach bei uns in den Community Foren der deutschen .NET Community vorbei. Die Teilnehmer helfen Ihnen gerne, wenn Sie sich zur im Artikel vorgestellten Technologie weiterbilden möchten.

Haben Sie Fragen die sich direkt auf den Inhalt des Artikels beziehen, dann schreiben Sie dem Autor! Unsere Autoren freuen sich über Feedback zu ihren Artikeln. Ein einfacher Klick auf die Autor kontaktieren Schaltfläche (weiter unten) und schon haben Sie ein für diesen Artikel personalisiertes Anfrageformular.

 

Und zu guter Letzt möchten wir Sie bitten, den Artikel zu bewerten. Damit helfen Sie uns, die Qualität der Artikel zu verbessern - und anderen Lesern bei der Auswahl der Artikel, die sie lesen sollten.

Bewerten Sie diesen Artikel
 Sehr gut   Nicht genügend  
   1  2  3  4  5  
 

  
   Für Ausdruck optimierte Seite

©2000-2006 AspHeute.com
Alle Rechte vorbehalten. Der Inhalt dieser Seiten ist urheberrechtlich geschützt.
Eine Übernahme von Texten (auch nur auszugsweise) oder Graphiken bedarf unserer schriftlichen Zustimmung.