in Datei schreiben, ohne zu überschreiben...



  • Hallo @ll,
    ich schreibe gerade an einer Header-Datei für *.ini Dateien, womit ich halt in eine *.ini Datei Schreiben, oder daraus lesen kann.

    Jetzt -wenn man einen schlüssel einträgt- kann es ja sein, dass die Sektion schon besteht, jetzt muss nur noch der Schlüssel unten angefügt werden.
    Wenn ich aber mal eben "mitten in die Datei" so 20 - 30 Bytes -oder mehr- schreibe, überschreibe ich doch sicher das, was im Weg stehen würde oder?

    Wenn ja, kann ich das umgehen?



  • das einfachste ist, wenn du für die sektionen eine konstante zeichenkettenlänge benutzt.



  • Bringt mir gar nichts...
    Grund: wenn ich

    [Hey_du_da]
    blubb=freak
    bla=penner
    ;hans wurst
    evt=pervert
    
    [was_geht]
    key1=029321
    key2=01234
    key3=023123
    

    sowas habe, und dann was einfüge

    addToSection( Hey_du_da, brabbel, dieter );
    

    müsste

    [Hey_du_da]
    blubb=freak
    bla=penner
    ;hans wurst
    evt=pervert
    brabbel=dieter
    
    [was_geht]
    key1=029321
    key2=01234
    key3=023123
    

    entstehen, aber ich vermute eher das daraus:

    [Hey_du_da]
    blubb=freak
    bla=penner
    ;hans wurst
    evt=pervert
    brabbel=dieter1=029321
    key2=01234
    key3=023123
    

    werden wird... und das wird ein Problem.
    oder liege ich falsch?



  • ja, da liegst du falsch.
    wenn du die länge in bytes für eine sektion vorgibst und natürlich auch diesen platz in der datei zur verfügung stellst, kann nicht von einer anderen sektion überschrieben werden.



  • Das ist einigermaßen richtig.
    Einigermaßen daher, weil ich das nicht OK finde, wenn man feste größen für irgendwas hat. Muss variabel sein...

    Es muss doch einen Weg geben, das zu meistern oder?
    Ich will ja quasi nur den Rest der Datei verschieben.



  • lippoliv schrieb:

    Das ist einigermaßen richtig.
    Einigermaßen daher, weil ich das nicht OK finde, wenn man feste größen für irgendwas hat. Muss variabel sein...

    Es muss doch einen Weg geben, das zu meistern oder?
    Ich will ja quasi nur den Rest der Datei verschieben.

    ob du das richtig findest, hin- oder her, es ist die gängige praxis.

    ansonsten kannst du mit zwei dateien arbeiten:
    kopiere bis einfügestelle, hänge neuen eintrag an, kopiere den rest.
    löschen der alten datei umbenennen der zweiten.

    thats all 🙂



  • Das ist natürlich ne ide... oder noch besser, Kopiere die betreffende Sektion in eine Neue Datei, hänge ans ender der neuen Datei den kram an, kopiere an das Ende der alten Datei zurück... Müsste auch gehn oder?



  • lippoliv schrieb:

    Das ist natürlich ne ide... oder noch besser, Kopiere die betreffende Sektion in eine Neue Datei, hänge ans ender der neuen Datei den kram an, kopiere an das Ende der alten Datei zurück... Müsste auch gehn oder?

    nö, das geht nicht so einfach. es sei denn, das die sektion wo du anfügst zufällig am ende der datei steht.



  • Na auch egal, denn es würde freier platz zurückbleiben. Deine ide ist scchon ganz gut, nur wie komme ich an den Dateinamen?



  • lippoliv schrieb:

    Na auch egal, denn es würde freier platz zurückbleiben. ...

    freier platz ? du hättest u.u. doppelte einträge.

    lippoliv schrieb:

    ... wie komme ich an den Dateinamen?

    den kannst du frei vergeben.
    zwei dateinamen brauchst du, z.b: 'die.ini' und 'temp.ini'

    // Pseudocode. 
    öffne temp.ini zum schreiben, öffne die.ini zum lesen
    
    bis einfuegestelle_gefunden_ist:
            kopiere inhalt von die.ini in temp.ini
    
    schreib einzufügenden eintrag in temp.ini 
    
    bis dateiende von die.ini:
             kopiere inhalt von die.ini in temp.ini
    
    schliesse temp.ini und die.ini
    lösche die.ini 
    umbennenen temp.ini in die.ini
    

    genau so kannst du übrigens auch vorgehen, wenn du einen eintrag löschen möchtest 🙂



  • Dann muss der Dateiname natürlich auch an meine Funktion übergeben werden richtig? Habe ich eine Chance, aus einem FILE* den Dateinamen zu lesen? Dann spare ich mir einen Parameter.

    Danke übrigens für deinen Pseudocode, hätts wahrscheinlich ähnlich, aber kompizierter gemacht, wie ich mich kenne 😃



  • lippoliv schrieb:

    Dann muss der Dateiname natürlich auch an meine Funktion übergeben werden richtig?

    klar.

    lippoliv schrieb:

    Habe ich eine Chance, aus einem FILE* den Dateinamen zu lesen?

    weiss nicht, lass dir doch die member von struct FILE ausgeben, wenn du eine datei geöffnet hast.



  • wie macht man sowas?

    HINWEIS:
    Notepad++(Texteditor, mit schlechtem syntaxhighlighting.)
    MinGW (ext.Compiler)
    kein debugger



  • lippoliv schrieb:

    wie macht man sowas?

    in eine gute dokumentation reingucken, welche die member der struct FILE auflistet.
    oder aber mit ner gute IDE, welche dir über code-completition die optionen anzeigt.

    lippoliv schrieb:

    HINWEIS:
    Notepad++(Texteditor, mit schlechtem syntaxhighlighting.)
    MinGW (ext.Compiler)
    kein debugger

    ist das nötig ? programmierst du unter windows, linux oder so ?
    für windows gibts kostenlos visual studio und sonstige, für linux gibts bestimmt auch gute IDEs



  • Kann man irgendwo ins Profil folgenden Text schreiben?:
    "Ich kenne IDEs z.B. Microsoft Visual Studio oder Borland Turbo Delphi usw...
    Mein Chef allerdings gibt mir folgende Richtlinie:
    Notepad++ (Texteditor mit schlechtem syntaxhighlighting [es geht eig])
    MinGW (externer compiler)
    kein debugger"
    Dann könnt ich mir manche posts sparen 😉

    Kann mir wer ein neues Bit geben? meine 8 Bit sond vollgelaufen

    << Beiträge: 256

    [edit] MIST 2 beiträge zu spät...



  • lippoliv schrieb:

    Kann man irgendwo ins Profil folgenden Text schreiben? ...

    in deine signatur 😉

    lippoliv schrieb:

    Mein Chef allerdings gibt mir folgende Richtlinie:
    Notepad++ (Texteditor mit schlechtem syntaxhighlighting [es geht eig])
    MinGW (externer compiler)
    kein debugger"

    welchen geistigen nährwert hat das ?
    back to the roots ?
    kannst ja deine win.ini gleich in stein ritzen 😃



  • Habs in der Sig,
    es hat einen Lerneffekt, da ich in der Ausbildung bin.

    Ich bekomme so ein Auge für den Code und kann mich mit fehlern besser auseinandersetzen, allerdings ist irgendwann der Zeitpunkt gekommen, wo man manche fehler beim Besten willen nicht versteht (mein Button-Icon problem wenn die buttons ne subclass haben) und am besten einen Debugger bräuchte...

    Naja, werde mich -bei zeiten- mal wieder an den INI kram machen, jetzt geht mein Editor erstmal vorran.



  • lippoliv schrieb:

    es hat einen Lerneffekt, da ich in der Ausbildung bin.

    achso, super.
    wie heisst denn die berufsbezeichnung ?

    lippoliv schrieb:

    Naja, werde mich -bei zeiten- mal wieder an den INI kram machen, jetzt geht mein Editor erstmal vorran.

    viel erfolg 👍



  • "Fachinformaticker fachrichtung Anwendungsentwicklger" oder eher "Programmierer" 😃

    Aber wie auch immer offiziell gilt "Benutze möglichst viele lange Wörter, wo die Leute am Ende des Satzes schon den Anfang vergessen haben und nurnoch sagen 'Boah Geiles Teil'" 😉

    Naja bin ja erst 5 Monate dabei, also lerne ich momentan noch ziemlich viel.



  • lippoliv schrieb:

    Naja bin ja erst 5 Monate dabei, also lerne ich momentan noch ziemlich viel.

    man lernt nie aus 😉 das ist nach 5 jahren auch nicht viel anders 🙂
    dann mal gutes gelingen für deine ausbildung ! 👍


Anmelden zum Antworten