AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi ParamStr ParamStr(0), Bildschirmschoner und lange Dateinamen
Thema durchsuchen
Ansicht
Themen-Optionen

ParamStr ParamStr(0), Bildschirmschoner und lange Dateinamen

Ein Thema von Delphi-Laie · begonnen am 27. Mai 2012 · letzter Beitrag vom 28. Mai 2012
Antwort Antwort
Seite 1 von 3  1 23      
Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#1

ParamStr ParamStr(0), Bildschirmschoner und lange Dateinamen

  Alt 27. Mai 2012, 18:56
Hallo Delphisten!

Zum ersten Male in meinem Leben verwandte ich Ini-Dateinamen. Als Relikt aus den Win3.x-Zeiten sind es Totgesagte, die deutlich länger als erwartet leben, und es erstaunte mich mithin auch nicht, daß das Programm (mit langem Exe-Dateinamen) eine korrespondierende Ini-Datei mit einer Tilde im Dateinamen anlegte - zumindest unter Windows 2000. Dasselbe Programm auf dem letzten Mohikaner meiner 9.x-Windows (konkret ME) ausgeführt, und ich kam aus dem Staunen so schnell nicht wieder heraus: Eine Ini-Datei mit komplettem langem Dateinamen wie der Dateiname der erzeugenden Exe-Datei, nur eben mit anderem Parameter (eben ini statt exe), wurde angelegt - ausgerechnet bei einem Betriebsprogramm, dem vom Alter her bald die Weihe in das Erwachsenendasein bevorsteht. Überflüssig, daß auch korrekt aus dieser Datei gelesen bzw. in diese geschrieben wurde, was aber auch unter Windows 2000 so war.

Es war zudem ein Delphi-2.0-Compilat.

Also kann TIniFile schon bei Delphi 2.0 eben doch grundsätzlich Dateien mit langem Namen anlegen und auch damit korrekt umgehen!

Nun vermute ich wegen der 2000er-Erfahrung, daß es unter NTx generell nicht funktioniert.

Weiß jemand, ob und, falls ja, wie man TIniFile den generellen Umgang mit langen Dateinamen beibringen kann?

Dank und Gruß

Delphi-Laie

Geändert von Delphi-Laie (28. Mai 2012 um 15:46 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#2

AW: IniFile TIniFile und lange Dateinamen

  Alt 27. Mai 2012, 19:11
Wie hieß die EXE und der Pfad?

Wenn es z.B. Probleme mit Unicode-Zeichen gibt, dann weißt die ANSI-WinAPI auf den alternativen kurzen Dateinamen aus.

Grundsätzlich versteht API lange Dateinamen.
Aber wenn die Datei schon existiert, dann kann man auch problemlos über den kurzen Namen gehn.
(geht natürlich nicht beim Anlegen einer Datei)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#3

AW: IniFile TIniFile und lange Dateinamen

  Alt 27. Mai 2012, 19:21
Deine Antwort war der Anstoß, aus einer anderen Richtung die Sache zu betrachten.

Der Fehler muß woanders liegen, und zwar daran, daß der Dateiname mit der verwandten Funktion aus dem Programmnamen nicht richtig extrahiert wird, es war nämlich, mein Irrtum, eine Bildschrimschonerdatei mit dem Parameter ".scr". Mit ".exe" klappte es auch auf Windows 2000 mit dem langen Dateinamen. Komisch eben nur, unter ME klappt es auch mit der scr-Programmdatei.

Ich danke Dir!
  Mit Zitat antworten Zitat
Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#4

AW: IniFile TIniFile und lange Dateinamen

  Alt 27. Mai 2012, 23:06
Also, die Sache weiterverfolgt: (T)Inifile ist völlig unschuldig. Die Ursache liegt darin, daß Paramstr(0) nur einen kurzen Dateinamen zurückliefert, wenn der Bildschirmschoner im Windows- oder im untergeordneten System32-Verzeichnis liegt. Das passiert aber nur, wenn der Bildschirmschoner vom Fenster "Eigenschaften von Anzeige" aufgerufen wird, wie es gewöhnlich ja auch sein soll. Wird er über die Kommandozeile des Eingabeaufforderungsfensters (Konsole) gestartet, auch wenn er sich am richtigen Ort (also in einem bzw. jedem der genannten Verzeichnisse) befindet, so liefert Paramstr(0) den "korrekteren" - nämlich den langen - Dateinamen zurück. Rätselhaft...

Edit: Hiermit funktioniert es zum Glück. Rätselhaft, warum beim Aufrufen der Bildschrimschoner von besagtem Fenster aus seitens Paramstr dateisystemisch in die DOS-Zeit zurückgeschaltet wird.

Geändert von Delphi-Laie (27. Mai 2012 um 23:56 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

AW: IniFile TIniFile und lange Dateinamen

  Alt 27. Mai 2012, 23:34
Sind Leerzeichen im Pfad? Und wenn ja, was passiert, wenn du ihn in Anführungszeichen setzt?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#6

AW: IniFile TIniFile und lange Dateinamen

  Alt 27. Mai 2012, 23:51
Sind Leerzeichen im Pfad? Und wenn ja, was passiert, wenn du ihn in Anführungszeichen setzt?
Leerzeichen nicht, auch nicht im Dateinamen. Allerdings lautet das Verzeichnis C:\Winnt.0, ob das schon zuviel ist? Was Du mit Anführungszeichen meinst, weiß ich nicht, ich arbeite ja mit Paramstr(0) und nicht mit in Anführungszeichen gesetzten Strings, die man an Stringvariablen übergibt.

Leerzeichen wäre(n) auch kein Argument dagegen, denn lange Dateinamen erlauben ja auch Leerzeichen in den Verzeichnis-/Dateinamen (was ja im weiteren Sinne dasselbe ist), auch mehrere Punkte usw. Die Konvention wird doch damit nicht verletzt (alles andere ließe Windows ja auch nicht zu). Wenn langnamentauglich, dann richtig oder eben gar nicht.

Ist doch jetzt auch nicht mehr wichtig. Paramstr(0) lieferte nur den kurzen Dateinamen zurück, warum auch immer, aber mit der Funktion in der verlinkten Diskussion ließ sich dieses (Fehl-?)Verhalten heilen.

Edit: Die Verliebtheit des ParamStr mit kurzen Dateinamen scheint auch andere vor Probleme gestellt zu haben, s. hier (dort wird allerdings ParamStr(1) verwendet, n.m.W. der Abruf des ersten Übergabeparameters).

Geändert von Delphi-Laie (27. Mai 2012 um 23:55 Uhr)
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#7

AW: IniFile TIniFile und lange Dateinamen

  Alt 28. Mai 2012, 00:07
Also lange oder kurze Dateinamen, das interessiert die Ini nicht. Ob du dem Ident als Wert einen langen Dateinamen oder ein Banane zuweist, ist ihm egal, solange die Zeile unter 1024 Zeichen bleibt. Auch interessieren ihn keine Leerzeichen. Das einzige ist, dass Anführungszeichen beim auslesen entfernt werden.

Zitat:
Paramstr(0) lieferte nur den kurzen Dateinamen zurück
Bei mir nicht.

Wenn du Lust hast, ich habe hier paar Units, z. B. EasyIniAppExe speichert alles in der Ini am Programm, wechselt man die Ini aus, wird alles in der Reg gespeichert, usw.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#8

AW: IniFile TIniFile und lange Dateinamen

  Alt 28. Mai 2012, 00:18
Leerzeichen nicht, auch nicht im Dateinamen. Allerdings lautet das Verzeichnis C:\Winnt.0, ob das schon zuviel ist? Was Du mit Anführungszeichen meinst, weiß ich nicht, ich arbeite ja mit Paramstr(0) und nicht mit in Anführungszeichen gesetzten Strings, die man an Stringvariablen übergibt.
meine.exe C:\Dies ist ein langer Pfad mit Leerzeichen\meine.ini Das sind für ParamStr 7 Parameter.
meine.exe "C:\Dies ist ein langer Pfad mit Leerzeichen\meine.ini" Das sind für ParamStr ein Parameter.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#9

AW: IniFile TIniFile und lange Dateinamen

  Alt 28. Mai 2012, 00:21
Also lange oder kurze Dateinamen, das interessiert die Ini nicht. Ob du dem Ident als Wert einen langen Dateinamen oder ein Banane zuweist, ist ihm egal, solange die Zeile unter 1024 Zeichen bleibt. Auch interessieren ihn keine Leerzeichen. Das einzige ist, dass Anführungszeichen beim auslesen entfernt werden.

Zitat:
Paramstr(0) lieferte nur den kurzen Dateinamen zurück
Bei mir nicht.
Bei mir leider schon. Ich reduzierte das Problem auf das Minimale. Leg den beigelegten Bildschirmschoner bitte mal in ein relevantes Verzeichnis und starte ihn über das Fenster "Eigenschaften von Anzeige". Er gibt den Paramstr(0)-Dateinamen zurück, einmal vor, einmal nach Application.Run. In jedem Falle bei mir mit den heißgeliebten Tilden.

Danke, den Rest schaue ich mir an, wenn der Tag wieder heller ist.
Angehängte Dateien
Dateityp: zip Paramstrtest.zip (111,2 KB, 4x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#10

AW: IniFile TIniFile und lange Dateinamen

  Alt 28. Mai 2012, 00:22
Was ist ein relevantes Verzeichnis?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:04 Uhr.
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