Rename

    Hallo,

    ich benutze die Delphi Berlin 10.1 Vollversion
    Es geschehen merkwürdige Dinge in dieser Version.
    Ich möchte eine Datei im Programm umbenennen.

    Z.B.so:
    assignfile(waehle1,lpf+spieler+'.sot');
    Rename(waehle1,spieler+'.old');

    "lpf" ist der Dateipfad.

    Das klappte in meinem Delphi 6 Prof. immer einwandfrei.
    In Delphi Berlin sieht der neue Dateiname so aus:
    当ﱇ瑮敨⹲潯t
    und die alte Datei wird gelöscht.
    Das mit dem löschen war in Delphi 6 auch nicht.
    Da musste man sich selber drum kümmern.
    Was läuft hier falsch??? ?(
    Muss ich irgendwo etwas einstellen?

    gringo
    Klingt nach String-Problem: ANSI vs. Unicode.

    AssignFile und Rename (aus der Unit System) erwarten beide in 10.1 einen Unicode-String. In Delphi 6 war das noch ein ANSI-String. Casten wird dir vermutlich helfen: statt String als Typ solltest du es mal mit ANSIString versuchen...

    Grüße
    Mikhal
    Computer erleichtern die Arbeit -
    und die Welt ist eine Scheibe!
    Hi haentschman,

    hier ist der Code:

    Delphi-Code

    1. procedure konvert_spielscheine;
    2. var x:Integer;
    3. begin
    4. if fileexists(lpf+Spieler+'.sot') then
    5. begin
    6. Try
    7. assignfile(waehle1,lpf+spieler+'.sot');
    8. Rename(waehle1,spieler+'.old');
    9. Try
    10. if fileexists(lpf+spieler+'.old') then
    11. begin
    12. assignfile (waehle1,lpf+spieler+'.old');
    13. reset(waehle1);
    14. Try
    15. assignfile(waehle,lpf+spieler+'.sot');
    16. rewrite(waehle);
    17. while not eof (waehle1) do
    18. begin
    19. read(waehle1,test1);
    20. test.datum:=test1.datum;
    21. for x:= 1 to 6 do
    22. test.reihe[x]:=test1.reihe[x];
    23. test.losnum:='';
    24. test.str2:='';
    25. test.str3:='';
    26. test.str4:='';
    27. test.losnum:=IntToStr(schein.spielschein);
    28. test.super6:=0;
    29. test.sp_77:=0;
    30. test.sp_s6:=0;
    31. test.int3:=0;
    32. test.int4:=0;
    33. test.int5:=0;
    34. test.l_int1:=0;
    35. test.l_int2:=0;
    36. test.l_int3:=0;
    37. test.l_int4:=0;
    38. test.l_int5:=0;
    39. write(waehle,test);
    40. end;
    41. closefile(waehle);
    42. Except
    43. closefile(waehle);
    44. end;
    45. closefile(waehle1);
    46. end;
    47. Except
    48. closefile(waehle1);
    49. end;
    50. end;
    51. end;


    Gruss Gringo
    Das Problem betrifft alle Strings.
    In deinem Code-Schnipsel (bitte beim nächsten Mal formatiert in den Delphi Tags eingeben - das Helmsymbol ganz rechts in der untersten Iconleiste -, dann kann man ihn besser lesen) verrätst du uns nicht wie z.B. deine Variablen lpf, Spieler, TextStr2 etc. definiert sind. Ich befürchte, dass das nur der Anfang einer Anpassungsorgie wird, da wahrscheinlich auch die bereits geschrieben Dateien immer mit einem 8-Bit Zeichensatz geschrieben wurden, sprich: die Struktur, die du als File schreibst und liest, wird dir noch eine Menge Arbeit bereiten.

    Grüße
    Mikhal
    Computer erleichtern die Arbeit -
    und die Welt ist eine Scheibe!
    Hi Mikhal,

    bevor ich auf Absenden geklickt habe, hatte ich auf Quellcode geklickt.
    Alles wurde dadurch ordentlich formatiert.
    Nach dem Absenden war die Formatierung wieder weg. (Leider)
    Hier sind meine Variablen:

    Delphi-Code

    1. lpf:string; //Gespeicherter Pfad.

    Der Rest sind 2 Records:

    Dies ist der alte Record.

    Delphi-Code

    1. type liste_sp_alt=record
    2. reihe:array[1..6] of integer;
    3. datum:string[15];
    4. end;


    Dies ist der neue erweiterte Record.

    Delphi-Code

    1. type liste_sp=record
    2. reihe:array[1..6] of integer;
    3. datum:string[15];
    4. Losnum,str2,str3,str4:string[30];
    5. Losnummer:Longint;
    6. super6:integer;
    7. sp_77,sp_s6,int3,int4,int5:integer;
    8. l_int1,l_int2,l_int3,l_int4,l_int5:Longint;
    9. end;


    Delphi-Code

    1. waehle:file of liste_sp;
    2. waehle1:file of liste_sp_alt;
    3. test1:liste_sp_alt;
    4. test:liste_sp;


    Die Daten des alten Record sollten in das Format des neuen record formatiert wedren.
    Ich hoffe, dass ich nichts vergessen habe.

    Gruss Gringo
    ...bist aber großzügig. :thumbsup:

    Die Daten des alten Record sollten in das Format des neuen record formatiert wedren.

    Damit du die alten Datenlesen kannst tausche nur den Filenamen als string aus. Der Record muß der selbe bleiben.
    ...überdenke die Speicherung deiner Daten in Formate die lesbar bleiben wie XML z.B.
    lpf:string; //Gespeicherter Pfad

    ...wie wird die Variable gefüllt. :huh:

    Dieser Beitrag wurde bereits 7 mal editiert, zuletzt von „haentschman“ ()

    Hi haentschman,

    danke für das Formatieren des Codes.
    Die Variable lpf wird wie folgt gefüllt:
    lpf:=ExtractFilePath(Application.ExeName);

    >Nachtrag: Damit du die alten Datenlesen kannst tausche nur den Filenamen als string aus. Der Record >muß der selbe bleiben.
    Das habe ich nicht verstanden. Kannst Du mal ein Beispiel geben.

    Mit XML kenne ich mich leider nicht aus.
    Da muss ich mal in die Hilfe gehen.

    Gruss Gringo

    Gringo schrieb:


    Mit XML kenne ich mich leider nicht aus.
    Da muss ich mal in die Hilfe gehen.

    Tu das ... es lohnt sich.
    Ich finde XML als Speicherformat für solche Dinge einfach ideal, da es sowohl per Code als auch von Menschen gut zu lesen ist.
    Das macht u.a. die Fehlersuche deutlich einfacher.
    "After three days without programming, life becomes meaningless." (The Tao of Programming, Book 2)
    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand" (Martin Fowler, 'Refactoring')
    Hi,
    erst mal Dank an alle die sich mit meinem Thema beschäftigt haben.
    Leider ist das Problem noch nicht ganz gelöst.
    Da Umbenennen klappt, wenn ich statt:
    assignfile(waehle1,lpf+spieler+'.sot');
    Rename(waehle1,spieler+'.old');

    diese Anweisung nehme:
    RenameFile(spieler+'.sot', spieler+'.old');
    Auch das Lesen der alten Daten klappt, allerdings treten Fehler bei den Strings auf.

    Die Variable test1 hat den Wert ((3, 12, 33, 37, 42, 49), #0#0#0#7'Gün')
    Richtig wäre ((3, 12, 33, 37, 42, 49),'Günther')

    Die Variable test1.datum hat den Wert #0#0#0#7'Gün'
    Richtig wäre'Günther'

    Diese gleichen Fehler traten aber auch schon in Delphi 6 Prof auf.
    Warum konnte ich auch damals nicht klären.

    Gruss Gringo
    Hi,

    Damit möchte ich euch nicht auch noch belasten.
    Für mich ist der Hauptfehlerpunkt das "Rename" geklärt und das klappt auch.
    Die Datei wird konvertiert, lediglich der Name steht nicht drin.
    Das ist aber kein Problem, da der Name in einem Arbeitsgang in der gesamten Datei korrigiert werden kann.
    Ich möchte mich bei allen die Ihre Zeit mit meinem Problem verbracht haben, ganz herzlich für Ihre Arbeit bedanken.
    Damit ist das Thema erledigt.

    Gruss Gringo