Directory() liefert ? im Namen

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

Antworten
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Directory() liefert ? im Namen

Beitrag von ramses »

Hallo

die Funktion Directory() liefert zeitweise merkwürdige bezw. falsche Ergebnisse.

So werden z.B. ü als ? angezeigt. Damit lässt sich dann nicht mehr arbeiten. Insgesammt habe ich ca, 4500 solcher Fälle.

was läuft hier falsch?

Gruss Carlo
Dateianhänge
a.jpg
a.jpg (39.19 KiB) 10663 mal betrachtet
Valar Morghulis

Gruss Carlo
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: Directory() liefert ? im Namen

Beitrag von georg »

Hallo, Carlo -


SET CHARSET ANSI?
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Directory() liefert ? im Namen

Beitrag von ramses »

Hallo Georg

Ja. Habe ich.

Gruss Carlo
Valar Morghulis

Gruss Carlo
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Directory() liefert ? im Namen

Beitrag von Tom »

Wende mal ConvToAnsiCP() oder ConvToOemCp() auf die Zeile mit den Dateinamen bzw. einen Wert daraus an. Eines von beiden (wahrscheinlich ConvToOemCp()) wird dazu führen, dass die Umlaute wieder erscheinen.
Herzlich,
Tom
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Directory() liefert ? im Namen

Beitrag von Tom »

Es kann natürlich auch daran liegen, dass die Musik so schlecht ist. :headbang:
Herzlich,
Tom
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Directory() liefert ? im Namen

Beitrag von brandelh »

Xppdbg im cmd fenster und ANSI exe können sich beißen. Was gibt msgbox aus. Directory liefert normal ANSI. Wenn die exe ANSI compiliert ist, dürfte keine Konvertierung nötig sein.
WelcHessen os und Dateisystem?
Gruß
Hubert
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Directory() liefert ? im Namen

Beitrag von ramses »

Hallo Tom
Tom hat geschrieben:Wende mal ConvToAnsiCP() oder ConvToOemCp()
Damit ändert sich nichts.
Tom hat geschrieben:Es kann natürlich auch daran liegen, dass die Musik so schlecht ist. :headbang:
Dieser Interpret Ist auch gar nicht mein Stil ..... aber Computer sind Maschinen ohne Inteligenz die reagieren nicht darauf. Hoffe ich ....

Gruss Carlo
Valar Morghulis

Gruss Carlo
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Directory() liefert ? im Namen

Beitrag von ramses »

Hallo Hubert
brandelh hat geschrieben: Was gibt msgbox aus
Auch mit ?
brandelh hat geschrieben:WelcHessen os und Dateisystem?
OS ist Windows 10 1703 verbunden über SMB3 mit einem FreeBSD 11 System mit Samba 4.6.2 und ZFS Dateisystem.

Im Windowsexplorer können die Dateien geklickt werden und spielen normal.

Gruss Carlo
Valar Morghulis

Gruss Carlo
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Directory() liefert ? im Namen

Beitrag von brandelh »

Und werden die Dateien im Explorer richtig angezeigt?
Auf jeden Fall sieht das nach Zeichensatz Fehler aus. Aber warum ?

Ein Fragezeichen im ANSI Namen bedeutet ein nicht ANSI Zeichen im Namen ...
Gruß
Hubert
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Directory() liefert ? im Namen

Beitrag von ramses »

Hallo Hubert

ja das scheint es zu sein. FreeBSD und Windows verwenden UTF-8, xbase kann diese Zeichen nicht verwenden und ersetzt Sie durch die ?

Damit scheint jeder Zugriff aus Xbase auf die Dateien nicht mehr möglich.
Auch die Unicode API Funktion z.b. FindFirstFileW lassen sich unter XBase merkwürdigerweise nicht verwenden. Komisch.
Ich wollte mit den ...W API Funktionen die Files umbenennen geht aber nicht.

Gruss Carlo
Valar Morghulis

Gruss Carlo
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2120
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 29 Mal
Danksagung erhalten: 70 Mal

Re: Directory() liefert ? im Namen

Beitrag von Werner_Bayern »

Servus Carlo,

dann nimm halt cAnsitoutf8 bzw. cUtf8ToAnsi aus ot4xb.
es grüßt

Werner

<when the music is over, turn off the lights!>
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Directory() liefert ? im Namen

Beitrag von ramses »

Hallo Werner

allle Convertier Funktionen bringen nichts. Xbase hat ja den UTF-8 Charakter bereits durch "?" ersetzt. Da gibt es nichts mehr zu Konvertieren.

Ich habe aber einen neuen Ansatz gefunden der Erfolg verspricht. Es ist keine Lösung aber ein Workaround.
MIt der API FindFirstFile etc. kann auch der FilenameShort (MS.DOS Format) abgefragt werden.
Mit einer Funktione welche die Problematischen Charakter aus dem Long Namen entfernt kann dann die Datei einfach umbenannt werden.
Einfach so: frename( cFileNameShort, cFilenameLongModi ) und gut ist.

Gruss Carlo
Valar Morghulis

Gruss Carlo
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Directory() liefert ? im Namen

Beitrag von Koverhage »

Also das ? wird ja nur angezeigt, weil Xbase++ das Zeichen dahinter nicht kennt bzw. nicht anzeigen kann.
Ich habe die Probleme Anwendung OEM Windows ANSI.
Abhilfe: CharCode der Rückgabe z.B. cDir ersetzen. Hier ist es hilfreich sich die
for i := 1 to len(cDir)
? Asc(cDir)
next
anzeigen zu lassen.
Ist zwar einmalig ein wenig Aufwand, hier funktioniert es aber.
Gruß
Klaus
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Directory() liefert ? im Namen

Beitrag von Tom »

Directory() nutzt die Windows-API und darin die ANSI-Funktionen (Suffix A). Sie liefert keine UTF8-Codierung. Die Ursache liegt woanders. Eine Applikation, die ANSI verwendet und auf Directory() zugreift, bekommt Umlaute und andere Sonderzeichen in ANSI. Isso.
Herzlich,
Tom
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2120
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 29 Mal
Danksagung erhalten: 70 Mal

Re: Directory() liefert ? im Namen

Beitrag von Werner_Bayern »

Tom hat geschrieben:Directory() nutzt die Windows-API und darin die ANSI-Funktionen (Suffix A). Sie liefert keine UTF8-Codierung. Die Ursache liegt woanders. Eine Applikation, die ANSI verwendet und auf Directory() zugreift, bekommt Umlaute und andere Sonderzeichen in ANSI. Isso.
Aber das Filesystem ist Linux / ZFS und wird lt. Carlo über SMB an Windows durchgereicht.
Ein kleiner GUI-Test würde es zeigen: Keine Konvertierung in den Workbench-Einstellungen, set charset to ansi und ein XbpStatic sollten Licht ins Dunkel bringen.
es grüßt

Werner

<when the music is over, turn off the lights!>
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Directory() liefert ? im Namen

Beitrag von ramses »

Hallo Klaus

das Zeichen hat den wert 63 für ? das ist ja das Problem.

Gruss Carlo
Valar Morghulis

Gruss Carlo
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Directory() liefert ? im Namen

Beitrag von ramses »

Hallo Tom

auch die API ....A Funktionen liefern bereits das "?" Zeichen anstelle von ü und einigen anderen Zeichen.
Die API der ...W Funktionen lassen sich nicht nutzen.
Der Umweg über den oben beschriebenen Workaround hilft.

Hallo Werner
Werner_Bayern hat geschrieben:Aber das Filesystem ist Linux / ZFS
NEIN NEIN NEIN, um himmelswillen nicht Linux sondern FreeBSD da liegen WELTEN dazwischen.


Gruss Carlo
Valar Morghulis

Gruss Carlo
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Directory() liefert ? im Namen

Beitrag von Koverhage »

Carlo,
probier doch das mal aus
https://www.jam-software.com/freeware/
Gruß
Klaus
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2120
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 29 Mal
Danksagung erhalten: 70 Mal

Re: Directory() liefert ? im Namen

Beitrag von Werner_Bayern »

ramses hat geschrieben:NEIN NEIN NEIN, um himmelswillen nicht Linux sondern FreeBSD da liegen WELTEN dazwischen.
Alles was nicht Windows ist, ist Linux oder nix für uns :lol:
es grüßt

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Directory() liefert ? im Namen

Beitrag von Jan »

Linux ist doch wie FreeBSD auch nur ein Unix.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Directory() liefert ? im Namen

Beitrag von ramses »

Hallo Jan
Jan hat geschrieben:Linux ist doch wie FreeBSD auch nur ein Unix.
Nein Jan, dem ist nicht so. FreeBSD stammt von dem Ursprünglichen AT&T Unix ab, das kannst du mit Linux gar nicht vergleichen. Höchstens in der gemeinsamen POSIX Schnittstelle.
In Wikipedia findest du sicher einige gute Artikel. Wenn du mal Power pur und Stabilität erleben willst wären einige Selbstversuche mit FreeBSD sehr zu empfehlen. Natürlich ausschliesslich im Textmodus!

Sicher mit Windows kann jeder, auch unbeholfene umgehen, jedoch finde ich Windows im Vergleich zu BSD wie frühe Steinzeit ......... (als Server natürlich, nicht als Arbeitsplatz)

Gruss Carlo
Valar Morghulis

Gruss Carlo
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Directory() liefert ? im Namen

Beitrag von Jan »

Carlo,

doch. Schreibst Du ja sogar selber. Welches Unix die Basis ist, ist doch gleich. Linux und FreeBSD haben jeweils ihre eigenen Wurzeln in dem System.

Aber letztendlich ist das auch egal. Es geht ja hier nicht um den Stammbaum aller Unixderivate, sondern um ein Zeichensatzproblem.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Directory() liefert ? im Namen

Beitrag von ramses »

Hallo Jan

in einem hast du recht. Es geht hier um den Zeichensatz.

Alle betroffenen Dateien kamen von einem Apple-Rechner auf den Server.
Es sind verschiedene Zeichen welche mit diretory() unter Xbase nicht korrekt sondern z.B. als ? ( ASC 63 ) oder auch als "-" aufgeführt werden.
File() liefert bei den betroffenen Files jeweils .F. so konnte ich die betreffenden Files einfach finden.
Inzwischen habe ich mit einem Tool die mehreren 1'000 Files wie oben beschrieben umbenannt.
Das Problem ist damit erkannt und vorerst beseitigt.
Schade dass Xbase nicht anscheinend nicht mit UTF-8 Zeichen / Filenamen umgehen kann.
Das scheint aber nicht nur ein Problem von Xbase zu sein denn auch die ANSI API Funktionen zeigen die betroffenen Filenamen nicht korrekt an.


Gruss Carlo
Valar Morghulis

Gruss Carlo
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Directory() liefert ? im Namen

Beitrag von brandelh »

Windows 7 oder 8 ff nutzen Unicode 16 oder 32 Bit. Keiner UTF-8 ... die Umsetzung nach Unicode funktioniert, aber Apple scheint hier ein Zeichen zu verwenden, das wie ein ü aussieht, aber eBen nicht von der API nach ANSI umgesetzt werden kann. Xbase++ selbst nutzt ausschließlich die ANSI API .

Gut dass es die kurzen Dateinamen gibt.
Gruß
Hubert
Antworten