Der in geschreibenen File überschreibt da gewesene sachen

  • Der in geschreibenen File überschreibt da gewesene sachen

    Ich schreibe in einen File. Leider löscht der alles was noch in dem File war.

    GML-Quellcode

    1. sgdw = file_text_open_write("saves/slotdata.sgd");
    2. file_text_write_real(sgdw,global.level)
    3. file_text_writeln(sgdw);
    4. file_text_write_real(sgdw,lives)
    5. file_text_writeln(sgdw);
    6. file_text_write_real(sgdw,global.schluessel1)
    7. file_text_writeln(sgdw);
    8. file_text_write_real(sgdw,global.schluessel2)
    9. file_text_writeln(sgdw);
    10. file_text_write_real(sgdw,global.schluessel3)
    11. file_text_close(sgdw);
    Alles anzeigen

    Darum lese ich alles erst aus dem file noch mal.

    GML-Quellcode

    1. sgdr = file_text_open_read("saves/slotdata.sgd");
    2. //SLOT1
    3. file_text_readln(sgdr);
    4. slot1_level = file_text_read_string(sgdr);
    5. file_text_readln(sgdr);
    6. slot1_lives = file_text_read_string(sgdr);
    7. file_text_readln(sgdr);
    8. slot1_schluessel1 = file_text_read_string(sgdr);
    9. file_text_readln(sgdr);
    10. slot1_schluessel2 = file_text_read_string(sgdr);
    11. file_text_readln(sgdr);
    12. slot1_schluessel3 = file_text_read_string(sgdr);
    13. //SLOT2
    14. repeat(2) file_text_readln(sgdr);
    15. slot2_level = file_text_read_string(sgdr);
    16. file_text_readln(sgdr);
    17. slot2_lives = file_text_read_string(sgdr);
    18. file_text_readln(sgdr);
    19. slot2_schluessel1 = file_text_read_string(sgdr);
    20. file_text_readln(sgdr);
    21. slot2_schluessel2 = file_text_read_string(sgdr);
    22. file_text_readln(sgdr);
    23. slot2_schluessel3 = file_text_read_string(sgdr)
    24. //SLOT3
    25. repeat(2) file_text_readln(sgdr);
    26. slot3_level = file_text_read_string(sgdr);
    27. file_text_readln(sgdr);
    28. slot3_lives = file_text_read_string(sgdr);
    29. file_text_readln(sgdr);
    30. slot3_schluessel1 = file_text_read_string(sgdr);
    31. file_text_readln(sgdr);
    32. slot3_schluessel2 = file_text_read_string(sgdr);
    33. file_text_readln(sgdr);
    34. slot3_schluessel3 = file_text_read_string(sgdr);
    35. file_text_close(file);
    Alles anzeigen

    Und schreibe es noch mal herein.

    GML-Quellcode

    1. sgdw = file_text_open_write("saves/slotdata.sgd");
    2. file_text_write_string(sgdw,"### SLOT1 ####")
    3. file_text_writeln(sgdw);
    4. file_text_write_string(sgdw,global.level)
    5. file_text_writeln(sgdw);
    6. file_text_write_string(sgdw,lives)
    7. file_text_writeln(sgdw);
    8. file_text_write_string(sgdw,global.schluessel1)
    9. file_text_writeln(sgdw);
    10. file_text_write_string(sgdw,global.schluessel2)
    11. file_text_writeln(sgdw);
    12. file_text_write_string(sgdw,global.schluessel3)
    13. file_text_writeln(sgdw);
    14. file_text_write_string(sgdw,"#### SLOT2 ####")
    15. file_text_writeln(sgdw);
    16. file_text_write_string(sgdw,slot2_level)
    17. file_text_writeln(sgdw);
    18. file_text_write_string(sgdw,slot2_lives)
    19. file_text_writeln(sgdw);
    20. file_text_write_string(sgdw,slot2_schluessel1)
    21. file_text_writeln(sgdw);
    22. file_text_write_string(sgdw,slot2_schluessel2)
    23. file_text_writeln(sgdw);
    24. file_text_write_string(sgdw,slot2_schluessel3)
    25. file_text_writeln(sgdw);
    26. file_text_write_string(sgdw,"#### SLOT3 ####")
    27. file_text_writeln(sgdw);
    28. file_text_write_string(sgdw,slot3_level)
    29. file_text_writeln(sgdw);
    30. file_text_write_string(sgdw,slot3_lives)
    31. file_text_writeln(sgdw);
    32. file_text_write_string(sgdw,slot3_schluessel1)
    33. file_text_writeln(sgdw);
    34. file_text_write_string(sgdw,slot3_schluessel2)
    35. file_text_writeln(sgdw);
    36. file_text_write_string(sgdw,slot3_schluessel3)
    37. file_text_close(sgdw);
    Alles anzeigen

    Leider funktioniert das schreiben wo ich erst alles lese und wieder rein schreibe nicht. Wieso? Ich kann kein Unterschied zu diesem schreiben finden:

    GML-Quellcode

    1. sgdw = file_text_open_write("saves/slotdata.sgd");
    2. file_text_write_real(sgdw,global.level)
    3. file_text_writeln(sgdw);
    4. file_text_write_real(sgdw,lives)
    5. file_text_writeln(sgdw);
    6. file_text_write_real(sgdw,global.schluessel1)
    7. file_text_writeln(sgdw);
    8. file_text_write_real(sgdw,global.schluessel2)
    9. file_text_writeln(sgdw);
    10. file_text_write_real(sgdw,global.schluessel3)
    11. file_text_close(sgdw);
    Alles anzeigen

    Und gibt es einen Lösung in der der bei write nur die überschreibt die ich wirklich überschreiben haben will (also praktisch nich so aufwenidig und vom code her weniger)?
  • file_text_open_write überschreibt immer die ganze Datei!!

    Wenn du was anfügen willst, benutze file_text_open_append(fname).

    Wenn du etwas behalten willst musst du das erst auslesen und dann wieder reinschreiben, aber mache alle Schreiboperationen in einer Phase, denn wenn du die Datei sonst wieder aufmachst überschreibt er es wieder.
    "Die Erde ist ein Irrenhaus. Dabei könnte das bis heute erreichte Wissen der Menschheit aus ihr ein Paradies machen. Dafür müsste die weltweite Gesellschaft allerdings zur Vernunft kommen."
    - Joseph Weizenbaum