Just nu i M3-nätverket
Gå till innehåll

Ta reda på filnamn lagrade i UNICODE under NT/2000


johan pålsson

Rekommendera Poster

johan pålsson

Hej !

 

Håller på och pysslar med Mac-stödet under W2K server och har stött på ett litet problem.

Tydligen lagras filnamn som inte stöds av windows, ex. "detta är en fil/filer" i unicode-format.

 

I explorern kan man byta namn på och kopiera sådana filer men hur gör man under VB6 ?

 

I VB6 så får man till svar att ovanstående fil heter "detta är en fil?filer" vilket ju inte är korrekt.

 

 

Hur läser man ut ett filnamn i Unicode ?

 

 

Mvh

 

/Johan

Länk till kommentar
Dela på andra webbplatser

Något rakt svar blir svårt att ge, men lite teorier runtomkring kanske kan hjälpa.

 

VB6 hanterar internt strängar i UNICODE-format. Om VB6 kallar på en DLL brukar strängarna automatiskt konverteras till ANSI på väg in i DLL-en och tvärtom andra hållet eftersom Microsoft tror att användarna bara anropar ANSI-funktioner i DLL-erna. Anropar du en COM-DLL slipper du det problemet eftersom BSTR (Basic STRing i UNICODE-format) är standard i COM.

 

Frågan är nu vad ditt problem beror på. Om mac-namnen är lagrade i UNICODE, då har de 16 bitar per tecken. Om det returneras från en DLL och VB6 tror att det är ANSI (8 bitar per tecken) kommer VB6 försöka göra UNICODE av strängen genom att mellan varje Byte skjuta in en nollställd Byte för att på så vis få 16 bitar per tecken. Då har du plötsligt 32 bitar per tecken, men det hanterar ju inte VB6. Därför uppfattas din sträng som varannan giltigt UNICODE-tecken, och varannan NULL. VB6 kör inte med nullterminering av strängar utan NULL uppfattas som ett mellanrum. filnamnet borde därför bli:

 

"d e t t a ä r e n f i l / f i l e r "

 

och det är ju inte ditt problem. Du har ju fått "/" utbytt mot "?". Det skulle kunna vara att MacOS har en annan kod för "/". Det kan också vara så att "/" används för katalogstrukturen precis som i UNIX. Windows som använder "\" för katalogstrukturer förstår då inte tecknet. Eller så är det tvärtom, windows utgår från att "/" används i katalogstriukturer, medan MacOS betraktar "/" som ett giltigt tecken i filnamn.

 

Där har du lite uppslag för att komma vidare.

 

Länk till kommentar
Dela på andra webbplatser

johan pålsson

Hej och tack för ditt svar.

 

Jag använder en funktion som heter DIR för att loopa igenom fillistan, jag får inga NULL tillbaka vid anrop av den, bara frågetecknen.

 

Förmodligen blir det som du säger någon form av Unicode->ANSI konvertering på vägen vilket gör att det riktiga filnamnet går förlorat.

Det finns ett litet sharewareprogram "macexplorer" som visar ett filnamn i hexadecimal form, där kan man se att "vanliga" tecken ligger lagrade i de första 8 bitarna (paddade med NULL) medan "specialtecknen" är 16 bitar.

 

Kan man möjligtvis anropa någon form av API-funktion för att få ut "rätt" filnamn, dvs. med 16 bitars teckenrepresentation ?

 

Det är riktigt att windows inte tolererar \ i filnamn, motsvarigheten / funkar inte heller (måhända lite CP/M rester ?), MacOS tillåter dock att man skapar filer med dessa tecken i (det använder i sin tur : som avgränsare mellan filer/bibliotek), liksom filer med * och ? i.

 

 

Vad jag själv skulle vilja är att kunna loopa igenom en fillista och antingen byta namn på filen eller lagra det "rätta" filnamnet i en databas.

 

 

Mvh

 

/Johan

 

Länk till kommentar
Dela på andra webbplatser

Hej, det är nog "/" som är ditt problem här. Jag kollade lite om MacExplorer. Det stod på ?deras? websida http://peccatte.karefil.com/software/MacExp/MacExpENG.htm att MacExplorer kan uppmärksamma "highlighta" en på filnamn som är förbjudna i Windows. Tyvärr stod det inte på sidan om det fanns någon automatisk funktion för att korrigera namnen. Tyvärr bekräftar dina erfarenheter att man när man döper filer måste ta hänsyn till de begränsningar som finns på olika system om man vill undvika problem. Alltså, inga katalogstrukturstecken, inga åäö, inte mer än tre tecken i suffixet osv.

 

Länk till kommentar
Dela på andra webbplatser

  • 2 months later...
johan pålsson

Hej !

 

Efter en hel del sökande på internet och användande av Windows API så har jag till sist fått till ett VB-program som "förstår" macfilnamn i Unicode och kan lista dem ungefär som MacExplorer.

 

Men, min VB-kod ser nu ut mer som ett C-program än ett VB-program..

 

 

/Johan

 

 

 

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...