![]() |
AW: IniFile TIniFile und lange Dateinamen
Zitat:
|
AW: IniFile TIniFile und lange Dateinamen
Zitat:
|
AW: IniFile TIniFile und lange Dateinamen
Besitzt du die Quellcodes deines Delphis?
Wie sieht der Code von ParamStr aus? |
AW: IniFile TIniFile und lange Dateinamen
Liste der Anhänge anzeigen (Anzahl: 1)
Mit "relevantem Verzeichnis" meinte ich eines für die Bildschirmschoner, also Windows (wie immer es auch benannt ist, früher gab es da ja noch Wahlfreiheit) oder sein Unterverzeichnis "System32". Die beiden kenne ich dafür. Also: Ein für die Bildschirmschoner relevantes Verzeichnis.
Bei mir liefert ParamStr(0), wenn (m)ein Bildschirmschonerprogramm aufgerufen wird, eben nur den kurzen Dateinamen (angehängtes Bild), der Grund liegt weiterhin im dunkeln. An einer fehlenden Path-Variable auf diese Verzeichnisse liegt es auch nicht. Hat jemand eine Idee? Falls nein, GetLongPahtName (bzw. dessen Kapselung) sind in der Lage, ParamStr(0)s Teilversagen auszugleichen. Es muß jetzt mal heraus: Ich möchte nur mal ein größeres Programmierprojekt erleben, bei dem man nicht mit solchen unverhergesehenen Problemen, Widrigkeiten, ja Lästigkeiten zu kämpfen hat. Gibt es wahrscheinlich nicht, liegt wohl im Wesen der Programmiererei. Wenn ich so etwas beruflich täte, liefe ich Gefahr, irgendwann vor Frustration bis Wut einen Rappel zu bekommen. Moderation: Soll ich den Titel dieser Diskussion umbenennen, z.B. in der Art: "ParamStr(0) liefert nur kurzen Dateinamen"? himitsu: Habe ich, liegt in der System.pas, sieht so:
Delphi-Quellcode:
und scheint sich zumindest bis Delphi-Version 4 auch nicht zu verändern.
function ParamStr(Index: Integer): string;
var P: PChar; Buffer: array[0..260] of Char; begin if Index = 0 then SetString(Result, Buffer, GetModuleFileName(0, Buffer, SizeOf(Buffer))) else begin P := GetCommandLine; while True do begin P := GetParamStr(P, Result); if (Index = 0) or (Result = '') then Break; Dec(Index); end; end; end; |
AW: IniFile TIniFile und lange Dateinamen
Jetzt mal nur eine dumme Frage, was ist an dem kurzen Pfad falsch, wieso stört es?
|
AW: IniFile TIniFile und lange Dateinamen
Schade, dann scheint das ein Problem bei
![]() Hätte ja sein können, daß es bei dir noch nicht verbaut wurde. Der erste Wert (0. Parameter) von ![]() z.B. über die Konsole oder via ShellExecute mit relativem Pfad aufgerufen "meinprogramm" (ohne .exe), dann steht genau das "meinprogramm" darin. ![]() ![]() [edit] Wenn du es benutzt, um z.B. auf eine INI zuzugreifen
Delphi-Quellcode:
, dann gibt es ein Problem, wenn es die INI noch nicht gibt und sie erstellt werden soll.
ChangeFileExt(ParamStr(0), '.ini')
(OK, wobei es eh keine gute Idee ist, die INI nach C:\Windows oder ins Programmeverzeichnis legen zu wollen :roll:) Außerdem ist der Kurzname der gleichnamigen INI nicht unbedingt identisch mit dem Kurznamen der EXE, selbst wenn die langen Namen übereinstimmen. |
AW: IniFile TIniFile und lange Dateinamen
Popov: Es funktioniert auch mit kurzem Dateinamen und läßt sich auch mit besagter Zusatzfunktion beheben. Aber Du weißt doch, wie Programmierer sind: Akribisch, pedantisch, penibel (wie immer positiv oder negativ konnotiert man das ausdrückt). Die Tilde sieht einfach besch...eiden aus und erinnert an das dunkle Windows-Mittelalter (was diesen geschwungenen Bogen wohl erst so häßlich werden ließ). Wenn es einmal korrekt und einmal nur halb funktioniert, dann stimmt doch irgendwo irgendetwas nicht, und wir wären keine Programmierer, wenn wir nicht wenigstens dieser Sache auf den Grund zu gehen versuchen würden, nicht wahr? Ist ja an der regen Beteiligung in den allermeisten Diskussionen ablesbar, und es schult ja sogar die Profis und fordert sie heraus (sozusagen eine kostenlose Weiterbildung).
himitsu: Vielleicht ist sogar ParamStr oder konkret ParamStr(0) unschuldig, aber einen GetCommandLine- oder GetModuleFileName-Befehl jetzt noch zu analysieren, überfordert mich nun doch endgültig. Allerdings funktionierte es sogar schon unter ME, und das wird wohl kaum großartig andere Befehle verbaut bekommen haben (2000 und ME erschienen ja fast gleichzeitig). Vielen Dank allen Interessenten und Helfern hier! Edit: Sogar unter einem XP funktioniert es mit dem langen Dateinamen unter den schon beschriebenen Voraussetzungen nicht. |
AW: IniFile TIniFile und lange Dateinamen
Liste der Anhänge anzeigen (Anzahl: 1)
Ich "pushe" jetzt ganz bewußt. Das Problem muß noch tiefer stecken. Im Anhang die Bildschirmkopie unter Windows XP (!) meines nunmehr inzwischen mit Delphi 7 (!) erstellten Testbildschirmschoners. Allmählich wundert es mich sogar, daß dieses Problem nicht nachvollziehbar sein soll.
|
AW: IniFile TIniFile und lange Dateinamen
Alles vollkommen korrekt.
![]() Zitat:
![]() Tja, das zeigt auch gleich, daß diese Programme mindestens Windows XP benötigen ... davor werden sie nichtmal starten. |
AW: IniFile TIniFile und lange Dateinamen
Nachlesen...naja, wenn zwei tun, ist es noch lang nicht dasselbe.
Danke, himitsu, daß Du Dich so rührend darum kümmerst. Wenn "alles vollkommen korrekt" ist, was ich nicht bezweifele, so ist doch - zumindest für mich - nicht nachvollziehbar, wieso dieses (Fehl-)Verhalten - Popov nicht bestätigen kann - nur auftritt, wenn der BS-Schoner über das von Windows eigens dafür präparierte Fenster, nicht jedoch über die Konsole aufgerufen wird. Konsistent ist das m.E. nicht. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:30 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz