Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Merkwürdiger Fehler, TStringlist.SaveToFile (https://www.delphipraxis.net/205816-merkwuerdiger-fehler-tstringlist-savetofile.html)

t2000 20. Okt 2020 09:37

Merkwürdiger Fehler, TStringlist.SaveToFile
 
Hallo zusammen,

ich habe seit heute einen ganz merkwürdigen Fehler.
Ein TStringlist.SaveToFile funktioniert nicht mehr.

Delphi-Quellcode:
var
  MeineListe: TStringlist;
begin
  MeineListe := TStringlist.Create;
  MeineListe.Add('xxx');
  MeineListe.SaveToFile( 'D:\temp\TSE\Bu2006839.input.tse');
Die Methode SaveToFile erzeugt den Fehler in der Unit System.SysUtils.

function FileCreate(const FileName: string; Mode: LongWord; Rights: Integer): THandle;

zeile
Result := CreateFile(PChar(FileName), GENERIC_READ or GENERIC_WRITE,
ShareMode[(Mode and $F0) shr 4], nil, Exclusive[(Mode and $0004) shr 2], FILE_ATTRIBUTE_NORMAL, 0);

Die Meldung lautet:

"D:\entwXE\Sopha\bin\ D:\temp\TSE\Bu2006839.input.tse" kann nicht erstellt werden. Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch.

Wobei der erste Teile der Pfad ist, in dem die exe-Datei liegt und der zweite Teil die eigentliche Datei die geschrieben werden soll.

Wer oder Wo ändert den Dateinamen??

Hier ist noch Delphi 10.3.3 mit Windows 10 Enterprise (regelmäßige Updates)

Letzte Woche ging noch alles.

Hat jemand einb ähnliches Verhalten bemerkt? Wondows Update vielleicht?

Viele Grüße
Thomas

hoika 20. Okt 2020 09:46

AW: Merkwürdiger Fehler, TStringlist.SaveToFile
 
Hallo,
Delphi-Quellcode:
MeineListe.SaveToFile( 'D:\temp\TSE\Bu2006839.input.tse');
Ist das wirklich die korrekte Zeile?
Oder eher

MeineListe.SaveToFile('_D:\temp\TSE\Bu2006839.inpu t.tse');

Wobei _ ein Leerzeichen ist.

Existiert D:\Temp, zur Not mal das Verzeichnis löschen und neu anlegen.

haentschman 20. Okt 2020 09:48

AW: Merkwürdiger Fehler, TStringlist.SaveToFile
 
Moin...:P
Zitat:

Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch.
...hatte ich heute morgen auch. :P

Bei mir war es ein nicht verbundes Laufwerk. :roll:

PS: StringList funktioniert immer. :zwinker:

t2000 20. Okt 2020 09:50

AW: Merkwürdiger Fehler, TStringlist.SaveToFile
 
Liste der Anhänge anzeigen (Anzahl: 1)
https://www.delphipraxis.net/attachm...1&d=1603183758

t2000 20. Okt 2020 09:56

AW: Merkwürdiger Fehler, TStringlist.SaveToFile
 
Es sind keine Leerzeichen oder falsche Laufwerke drin.

Ich werde nun mal ein kleines Testprogramm schreiben. Das Original ist sehr groß.

KodeZwerg 20. Okt 2020 09:56

AW: Merkwürdiger Fehler, TStringlist.SaveToFile
 
Testprogramm steht doch schon in Post #1 :)

hoika 20. Okt 2020 10:07

AW: Merkwürdiger Fehler, TStringlist.SaveToFile
 
Hallo,
die "exception message" ist unvollständig.

Sieht aus wie ein kaputter String, der dazu führt,
dass Delphi einen relativen Pfad annimmt.

bin\ D:

Und ich sehe trotzdem ein Leerzeichen...

t2000 20. Okt 2020 10:14

AW: Merkwürdiger Fehler, TStringlist.SaveToFile
 
Das ist die Meldung(Exception) die im MadExcept steht.

Der Dateiname ist: 'D:\name usw.'. Die Fehlermeldung lautet: "D:\bin D:\name usw."
"D:\bin" ist der Pfad der exe-Datei
dann ein Leerzeichen
dann der Dateiname, den ich übergebe


-----------------

Das Testprogramm läuft. Mit den identischen Dateiname und Pfaden.
Die Ursache muss woanders liegen.

Trotzdem, Es wird ein CreateFile mit korrektem Parameter aufgerufen und aus der Windows API kommt der Fehler

KodeZwerg 20. Okt 2020 10:35

AW: Merkwürdiger Fehler, TStringlist.SaveToFile
 
Vielleicht vor Deinem SaveTo ein SetCurrentDir oder ChDir durchführen? (Wobei es bei meinen Versuchen Wurst ist...)

t2000 20. Okt 2020 11:43

AW: Merkwürdiger Fehler, TStringlist.SaveToFile
 
Gefunden. Es war tatsächlich ein Leerzeichen schuld.
Die Pfadangebe wurde aus der Datenbank gelesen. Anschließend mit "IncludeTrailingPathDelimiter" erweitert. Diese Funktion kontrolliert nicht, ob es ein gültiger Pfad ist, sondern hängt einfach ein Backslash dran.
Bei meinen ersten Tests ahbe ich natürlich immer den Pfad genutzt. Fragt mich nicht wieso. Er sah ja optisch richtig aus.
Hätte die Exception nicht so eine blöde Meldung gegeben, hätte ich wahrscheinlich sofort gesehen. Aber mit dieser Meldung habe ich an den falschen Stellen gesucht.

Warum wird dabei der aktuelle Ordner mit angegeben? In der Meldung habe ich das Leerzeichen natürlich gesehen. Es aber nicht dem Pfad zugeschrieben.

Vielleicht war es auch einfach nur die morgendliche Blindheit.
Danke trotzdem.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:10 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz