Announcement

Collapse
No announcement yet.

Löschen von Sektionen in einer Ini-Datei

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Löschen von Sektionen in einer Ini-Datei

    Hi zusammen,

    Aufgrund spezifischer Anforderungen muss ich Konfigurationen auswählbarer Elemente in einer INI-Datei speichern. Laut Auftrag gibt es keinen Zugriff auf die Registry, ob hier Berechtigungsprobleme vorliegen, oder der Wunsch, dass ein User die Werte für alle verändern kann weiß ich nicht, der Grund ist mir aber eigentlich auch egal.

    Zum Auslesen aus den Dateien nutze ich GetPrivateProfileInt und GetPrivateProfileString, zum Schreiben WritePrivateProfileString, die erzeugen mir ja entsprechende Sections, sollten sie nicht vorhanden sein. Was mache ich aber, wenn ich eine Section löschen will, weil das Element entfernt wurde. MSDN schreibt in Ihrer Funktionsbeschreibung zwar, dass bei WritePrivateProfileSection die Keys gelöscht werden, d.h. ich könnte da einen String übergeben, der nur aus zwei 0-Charactern besteht, aber das löscht mir doch nicht die Sektion, oder?

    Im Endeffekt wäre es zwar halb so schlimm, da ich die Anzahl und Namen der auszulesenden Sektionen in einer Hauptsektion nochmal darlege, entsprechende Leichen also funktionstechnisch nicht ins Gewicht fallen, ich würde sie aber trotzdem gerne entfernen, und sei es nur, um die Ini-Datei klein zu halten.

    Ich hoffe jemand kann mir helfen. Vielen Dank im Voraus
    Martin Dietz

  • #2
    Hallo,

    hab zwar von INIs keine (wenig) Ahnung aber vielleicht werden sie gelöscht wenn 'null' übergeben wird.

    Was spricht gegen eine Speicherung der Einstellungen in XML?

    mfG Gü
    Zuletzt editiert von gfoidl; 30.09.2008, 15:46.
    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

    Comment


    • #3
      Die Beschreibung von WritePrivateProfileSection auf MSDN sagt:

      The data in the buffer pointed to by the lpString parameter consists of one or more null-terminated strings, followed by a final null character. Each string has the following form:

      key=string
      Also denke ich mal eher, dass die Funktion als nicht erfolgreich zurückkommt, wenn er den String nicht auswerten kann, weil ich Nothing übergebe, schlimmstenfalls löst es eine Exception aus, wenn da ein Null-Pointer an die Funktion übergeben wird, aber ich kann es mal ausprobieren.

      Gegen die Speicherung als XML spricht eigentlich hauptsächlich, dass die Vorgabe vorschreibt, dass dies ohne weitere Kenntnis auch vom User direkt zu ändern sein soll, und das würde bedeuten, ein normaler Ingenieur, der von XML gerade mal gehört hat, muss die Text-Datei berabeiten können, um Verzeichnisse usw. selbst anzupassen, und da kann man nicht verlangen, dass er sich in einer XML-Struktur erstmal die Position suchen muss, die er ändern will. Gut, ich hätte auch nicht unbedingt von jedem erwarten können, einen bestimmten Key in der Registry zu finden, vielleicht war dies auch einer der Gründe warum eine Speicherung in der Registry abgelehnt wurde...

      Also, ich werde es mal mit NULL (bzw. Nothing) probieren, viel Hoffnung habe ich allerdings nicht...

      Gruß
      Martin Dietz

      Comment


      • #4
        Originally posted by M.Dietz View Post
        Gegen die Speicherung als XML spricht eigentlich hauptsächlich, dass die Vorgabe vorschreibt, dass dies ohne weitere Kenntnis auch vom User direkt zu ändern sein soll, und das würde bedeuten, ein normaler Ingenieur, der von XML gerade mal gehört hat, muss die Text-Datei berabeiten können, um Verzeichnisse usw. selbst anzupassen, und da kann man nicht verlangen, dass er sich in einer XML-Struktur erstmal die Position suchen muss, die er ändern will.
        Das kann ich nicht gelten lassen denn selbiges gilt auch für INIs.

        Es kann ja auch per GUI geändert werden und so hat selbst der größte DAU nichts in der Datei verloren

        mfG Gü

        PS: Ich will nicht unterstellen dass Ingenieure DAUs sind - ganz im Gegenteil.
        "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

        Comment


        • #5
          Laut MSDN löscht WritePrivateProfileString(nicht WritePrivateProfileSection) eine Section wenn man als Keynamen NULL übergibt.

          Comment


          • #6
            Mit API

            ....und das ganze sieht dann so aus..

            Code:
            Public Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal lpString As String, ByVal lpFileName As String) As Integer
            
            Public Sub LöscheSektion(Sektionsname as String, INIDatei as String)
            WritePrivateProfileString(Sektionsname , vbNullString, "", INIDatei )
            end sub
            mfg Cadburry

            Comment

            Working...
            X