INI Key löschen funtkioniert nicht

  • Hallo ich würde gerne einen Key in einer INI-Datei löschen. Hab es jetzt mit Inidelete versucht

    IniDelete("c:\abc.ini", "ChallengerKey", "Key")


    Nur irgendwie tut sich da nix... der Pfad stimmt, die Datei ist vorhanden usw... aber es tut sich nix... in der Hilfe steht das ein False zurückgeliefert wird wenn die INI-Datei read-only ist... wie bekomm ich die denn auf write?!?

    Wollte eigentlich mit meinem Skript den Key löschen und dann durch einen neuen Wert ersetzen =/

    Vielleicht kennt sich da ja wer besser aus als ich :P

    Schöne Grüße

    Einmal editiert, zuletzt von sNare (11. Oktober 2012 um 11:15)

  • [autoit]

    IniWrite('Test.ini', 'Section', 'Key1', 1)
    IniWrite('Test.ini', 'Section', 'Key2', 2)
    IniDelete('Test.ini', 'Section', 'Key2')

    [/autoit]

    Wenn man dieses kurze Script mal testet, sieht man, dass der Key2 aus der ini gelöscht wird.
    Die Sektion bleibt allerdings.

    Am besten postest du mal dein ganzes Script, weil du vermutlich da was Falsch hast.
    Aber wie chesstiger schon sagt, du brauchst den Wert nicht vorher löschen, sondern kannst diesen direkt überschreiben.

  • Hey danke Leute!!! Hab es jetzt zwar anders gelöst aber eure Lösung ist um einiges einfacher :D
    Hätte ich das mal vorher gewusst dann hätte ich mir einige Arbeit erspart aber egal learn by doing

    Wenn ich jetzt wüsste wie ich den Code hier vernünftig reinstellen könnte dann könnte ich euch zeigen was ich da gebastelt habe hehe

    Aber irgendwie wird der Code immer umformatiert obwohl ich den zwischen das AutoIt Element packe :(

  • Ah jetzt klappt es! Wie gesagt meine Lösung ist um einiges länger aber erfüllt auch seinen Zweck :P IniWrite find ich aber dann doch cooler :D
    Danke nochmals ;)

    [autoit]


    Const $iniFile= "c:\makinstaller\hardware.ini"

    [/autoit][autoit][/autoit][autoit]

    Global $pass = "abc";
    Global $IDalt = IniRead($iniFile,"ChallengerKey","Key","NOT FOUND");
    Global $string;

    [/autoit][autoit][/autoit][autoit]

    ;~ Array mit den einzelnen Zeilen aus der INI-Datei wird deklariert
    Dim $aRecords

    [/autoit][autoit][/autoit][autoit]

    ;~ Der ChallengerKey wird nochmals verschlüsselt
    $IDneu = _StringEncrypt(1,$IDalt,$pass,2)

    [/autoit][autoit][/autoit][autoit]

    ;~ Die INI-Datei wird Zeile für Zeile in das Array $aRecords geschrieben
    _FileReadToArray($iniFile, $aRecords)

    [/autoit][autoit][/autoit][autoit]

    ;~ Das Array mit den Zeilen aus der INI-Datei wird durchlaufen und es wird nachdem ChallengerKey gesucht. Dieser wird durch den neuen Wert ersetzt
    For $x = 1 To $aRecords[0]
    $string = $aRecords[$x]
    $string = StringReplace($string,$IDalt,$IDneu)
    $aRecords[$x] = $string
    Next

    [/autoit][autoit][/autoit][autoit]

    ;~ Die neue INI-Datei mit den neuen Werten wird erstellt
    $fh = FileOpen("c:\makinstaller\hardware.ini", 2)
    For $i = 1 To $aRecords[0]
    FileWrite($fh,$aRecords[$i] & @CRLF)
    Next
    FileClose($fh)

    [/autoit]
  • Wieso so umständlich? Und warum nutzt du die Variable $string? Du schreibst es doch sowieso wieder in $aRecords[$x] rein.
    Achja übriegens kannst du statt $x auch $i nehmen ;)

  • ja ich weiß aber ob $i, $x oder $a ist ja schnuppe :P bzw. das mit dem $string haste recht hehe aber insgesamt alles unnötig da es ja IniWrite gibt :P

    wo schließe ich das thema denn? mir wurde ja geholfen ;)

  • Naja, nach der ungarischen Notation steht das i für Integer ;).
    Schließen nicht, nur den Startpost bearbeiten und auf gelöst setzen.