invalid filename

Für Fragen von Einsteigern und Programmieranfängern...
Aliobaba
Lazarusforum e. V.
Beiträge: 496
Registriert: Di 1. Mai 2012, 09:11

invalid filename

Beitrag von Aliobaba »

Hallo,

seit Jahren ist dieses Programm: https://www.heise.de/download/product/mymemorydb-89626 bereits "auf dem Markt". In der letzten Woche bekomme ich plötzlich von zwei Anwendern, die das Programm testen wollten, unabhängig voneinander die Rückmeldung, dass nach der Abfrage der Nutzerbdingungen (das Programm startet also!) die Meldung erscheint: „invalid filename“ . Beide Anwender wollten das Programm unter Windows 10 starten, mit Windows-Versionen < 10 funktioniert alles gut, ebenso vällig problemlos unter Linux.

Ein Start im Kompatibilitätsmodus half nicht, auch nicht ein Start "als Administrator"

Jemand eine Idee? (andere SQLite-Version unter Windows 10?)

Aliobaba
"MyMemoryDB" ( https://www.heise.de/download/product/mymemorydb-89626 )

MacWomble
Lazarusforum e. V.
Beiträge: 999
Registriert: Do 17. Apr 2008, 01:59
OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
CPU-Target: Intel i7-10750 64Bit
Wohnort: Freiburg

Re: invalid filename

Beitrag von MacWomble »

Aufgrund der Verzeichnisstruktur von W10 vermute ich das Problem dort. Die sichtbaren Ordner gibt es nicht, fast alle Ordnernamen sind Verknüpfungen.
Das beste wäre ein Debug auf W10 (z.B. in einer Virtuellen Installation. Eventuell spielt auch ein Leerzeichen im Pfad einen Streich?
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.

siro
Beiträge: 730
Registriert: Di 23. Aug 2016, 14:25
OS, Lazarus, FPC: Windows 11
CPU-Target: 64Bit
Wohnort: Berlin

Re: invalid filename

Beitrag von siro »

Ich habe schon oft Probleme gehabt, weil die Verzeichnisnamen im Windows Explorer nicht der Verzeichnisstruktur auf der Platte entsprechen.
Den Ordner C:\Benutzer zum Beispiel gibt es garnicht. Geht man mal auf Commnd Ebene wird man feststellen dass der Ordner C:\Users heisst.
Da gibt es noch einige Ordner wo Windows sich "meiner Meinung nach Willkürlich" einen eignen Namen ausdenkt.....
Vielleicht hilft es Dir weiter.

Habe auch im Hautpverzeichnis angeblich 2 Ordner namens C:\Programme wie das wohl gehen solll :?

Wenn ich in Command mir das Hauptverzeichnis C:\ ansehe mit Dir p*
erscheinen alle Programme und Verzeichnisse mit dem Anfangsbuchstaben "p"
aber der Ordner Programme gibt es nicht. Ich kann aber in diesen Ordner wechseln mit "cd Programme"
Sehr merkwürdig alles....

Mit

Code: Alles auswählen

  if DirectoryExists('c:\programme') then caption:='ja';

oder
FileExists('blBla')....

evtl. mal prüfen

Siro
Grüße von Siro
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...

Aliobaba
Lazarusforum e. V.
Beiträge: 496
Registriert: Di 1. Mai 2012, 09:11

Re: invalid filename

Beitrag von Aliobaba »

Danke für diese Hinweise!!

Leider habe ich gerade kein Windows 10 verfügbar, werde aber sobald als möglich Euren Hinweisen nachgehen - und berichten! Danke dafür!!
Dass der selbe Ordner mal C:\Users heißt und dann wieder C:\Benutzer ist natürlich schon - freundlich ausgedrückt - "überraschend".

Aliobaba
"MyMemoryDB" ( https://www.heise.de/download/product/mymemorydb-89626 )

wp_xyz
Beiträge: 4864
Registriert: Fr 8. Apr 2011, 09:01

Re: invalid filename

Beitrag von wp_xyz »

Ich nehme an, es ist ein Lazarus-Programm. Falls du selbst das Problem nicht reproduzieren kannst, wird dir nichts anderes übrig bleiben, als an kritischen Stellen in dem Quellcode Aufrufe von DebugLn(...) einzubauen, du brauchst dazu die Unit LazLogger. DebugLn hat gegenüber WriteLn den Vorteil, dass man unter Windows keinen Absturz erhält, wenn in den Projektoptionen "Win32-GUI-Anwendung" markiert ist, wie es standardmäßig der Fall ist. Du kannst dann die betroffenen User bitten, dein Programm mit dem Kommandozeilen-Parameter --debug-log=logdateiname zu starten. Je nachdem, wie gut die DebugLn-Aufrufe verteilt sind, siehst du dann an der Log-Datei, wie weit das Programm bis zum Absturz gekommen ist.

Zu LazLogger: http://wiki.freepascal.org/LazLogger

Mathias
Beiträge: 6146
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: invalid filename

Beitrag von Mathias »

Den Ordner C:\Benutzer zum Beispiel gibt es garnicht. Geht man mal auf Commnd Ebene wird man feststellen dass der Ordner C:\Users heisst.


Unter Windows sollte man niemals direkte Pfade angeben, man sollte die Pfade immer ermitteln.

http://www.tech-ecke.de/index_quereinst ... itteln.htm
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Aliobaba
Lazarusforum e. V.
Beiträge: 496
Registriert: Di 1. Mai 2012, 09:11

Re: invalid filename

Beitrag von Aliobaba »

Hallo,

ganz herzlichen Dank für Eure Hinweise! BEIDE Anwender haben nun mit folgendem Hinweis "MyMemoryDB" am Laufen:

Lt. dem o.g. Forumbeitrag "verbiegt" Windows 10 Dateinamen und Pfade.
Dass der selbe Ordner mal C:\Users heißt und dann wieder C:\Benutzer ist natürlich schon - freundlich ausgedrückt - "überraschend".

Vielleicht hilft folgendes Vorgehen:
Erstellen Sie sich doch mal "manuell" den Ordner C:\Mym_Test (zum Beispiel)
und kopieren Sie dort hinein das "MyMemoryDB-Zip-File". Versuchen Sie bitte dann den Start nochmal.


Danke!
Aliobaba
"MyMemoryDB" ( https://www.heise.de/download/product/mymemorydb-89626 )

Aliobaba
Lazarusforum e. V.
Beiträge: 496
Registriert: Di 1. Mai 2012, 09:11

Re: invalid filename

Beitrag von Aliobaba »

Hallo Mathias,
das habe ich im Programm so gemacht. Aber wenn Windows10 unter verschiedenen Anwendungen verschiedene Namen für den selben Ordner liefert, dann gibt's halt solche Probleme, wie beschrieben.
Danke!
Aliobaba
"MyMemoryDB" ( https://www.heise.de/download/product/mymemorydb-89626 )

Mathias
Beiträge: 6146
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: invalid filename

Beitrag von Mathias »

das habe ich im Programm so gemacht. Aber wenn Windows10 unter verschiedenen Anwendungen verschiedene Namen für den selben Ordner liefert, dann gibt's halt solche Probleme, wie beschrieben.

Wen sich der Programmierer ursprünglich daran gehalten hätte, würde es keine Probleme geben.

Aber leider musste ich auch schon vielfach feststellen, das dies nicht der Fall ist.

Das hat man schon gut bei alten deutschen Windows-Versionen (Win95/98) gesehen. Normalerweise hat es dort einen Ordner "Programme" und auf einmal gibt es noch eine Programminstallation einen Ordner "Program Files". :roll:
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

shokwave
Beiträge: 470
Registriert: Do 15. Nov 2007, 16:58
OS, Lazarus, FPC: Win11/Ubuntu Budgie (L 3.0 FPC 3.2.2)
CPU-Target: i386, x64
Wohnort: Gera

Re: invalid filename

Beitrag von shokwave »

Hab es gerade mal ausprobiert. Für mich sieht es so aus als hätte dein Programm ein Problem mit Umlauten im Pfad(z.B. beim Usernamen).

Test 1: Unter C:\Tmp\ -> alles i.O
Test 2: Unter C:\Tmp\Töst\ -> Fehler
Test 3: Unter C:\Tmp\Te st\ -> alles i.O.

Ich denke auch nicht, dass es was mit Windows 10 und wie der Explorer die Verzeichnisse anzeigt zu tun hat. Schau mal ob du den Pfad zur Datei(mutmaßlich die Datenbank) irgendwie passend konvertiert bekommst(SysToUTF8 o.ä.).

Edit: In meinen Tools verwende ich

Code: Alles auswählen

ExtractFilePath(Paramstr(0))
um den Pfad zum Programm zu ermitteln.
mfg Ingo

Mathias
Beiträge: 6146
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: invalid filename

Beitrag von Mathias »

Hab es gerade mal ausprobiert. Für mich sieht es so aus als hätte dein Programm ein Problem mit Umlauten im Pfad(z.B. beim Usernamen).

Umlaute und auch Leerzeichen verwende nach Möglichkeit nie in Datei/Verzeichnisnamen, mit solchen Zeichen ist Ärger vorprogrammiert. Als Leerzeichen verwende ich ein "_".
Mit anderen Worten alle Zeichen, die man bei einem Bezeichnernamen in Pascal verwenden, sind gute Namen für Ordner und Dateien.
Bei einem Word-Dokument geht so was, aber nur schon Project-Verzeichnisse von Lazarus mit Leerzeichen können Probleme verursachen.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

shokwave
Beiträge: 470
Registriert: Do 15. Nov 2007, 16:58
OS, Lazarus, FPC: Win11/Ubuntu Budgie (L 3.0 FPC 3.2.2)
CPU-Target: i386, x64
Wohnort: Gera

Re: invalid filename

Beitrag von shokwave »

Mathias hat geschrieben:Umlaute und auch Leerzeichen verwende nach Möglichkeit nie in Datei/Verzeichnisnamen, mit solchen Zeichen ist Ärger vorprogrammiert.

Das weiß er sicher, aber sein Programm ist "portable" und wenn der User "Klaus Müller" in seinem Downloadordner(C:\Users\Klaus Müller\Downloads) das Programm startet, hat er ein Problem...
mfg Ingo

Aliobaba
Lazarusforum e. V.
Beiträge: 496
Registriert: Di 1. Mai 2012, 09:11

Re: invalid filename

Beitrag von Aliobaba »

shokwave hat geschrieben:Edit: In meinen Tools verwende ich

Code: Alles auswählen

ExtractFilePath(Paramstr(0))
um den Pfad zum Programm zu ermitteln.

Genau dieser Befehl kommt in meinem Programm zur Anwendung, um den Pfad zum Programm zu erhalten.
Auch "SysToUtf8" kommt oft zur Anwendung. Ob ich dies immer in letzter (korrekter) Konsequenz gemacht habe --> ??
Dies ist eine wirklich schwierige Materie, wie auch die vielen Threads zu diesem Thema in diesem forum deutlich zeigen.
Aliobaba
"MyMemoryDB" ( https://www.heise.de/download/product/mymemorydb-89626 )

wp_xyz
Beiträge: 4864
Registriert: Fr 8. Apr 2011, 09:01

Re: invalid filename

Beitrag von wp_xyz »

Wenn du einen fpc vor Version 3.0 benutzt, musst du ParamStrUTF8 aus der Unit LazUTF8 nehmen, damit die Umlaute richtig erkannt werden. Ab fpc 3.0 ist das ok.

VB_Lazarus
Beiträge: 90
Registriert: Do 23. Dez 2010, 19:10
OS, Lazarus, FPC: Windows 10/11 32/64bit, L 2.2.0 32bit, FPC 3.2.2 32bit
CPU-Target: 32Bit

Re: invalid filename

Beitrag von VB_Lazarus »

Hallo,

ich hatte ein ähnliches Problem gehabt und seit ich folgende Funktion anwende

Code: Alles auswählen

 
  Einstellungsdatei := ExtractFilePath(Application.ExeName) + 'EINSTELLUNGEN.INI';
 

ist das Problem nicht vorhanden.
Mein Programm ist auch portabel und läuft unter Win7/10.

Gruß

Antworten