Toon posts:

[c++][wininet] Probleem met lange bestandsnamen via FTP

Pagina: 1
Acties:

Verwijderd

Topicstarter
Als ik de functie FtpFindFirstFile() uitvoer voor bestanden met een bestandsnamen die een 8.3 formaat hebben werkt alles goed.

B.v. :
HINTERNET hFind = FtpFindFirstFile(m_hConnection, "balk.jpg", &W32FindData, INTERNET_FLAG_RELOAD, 0);

Als ik deze functie gebruik voor bestanden met lange bestandsnamen ( b.v. knoppenbalk 5.jpg ) dan gaat de FtpFindFirstFile() mis. Hieronder het antwoord van de ftp server :

200 Type set to A.
200 PORT command successful.
150 Opening ASCII mode data connection for /bin/ls.
550 /chn/1/knoppenbalk: The system cannot find the file specified.

De server kapt de filenaam af na de spatie. Ik heb geprobeert de URL te encoden met InternetCanonicalizeUrl() maar ook dat is voor ftp geen oplossing.

Iemand een oplossing of een tip om dit probleem te verhelpen ?

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Is dit niet gewoon een probleem van de server? Wat zegt het ftp protocol hierover?

We adore chaos because we like to restore order - M.C. Escher


Verwijderd

Topicstarter
Als ik in log op de ftp server via de command prompt dan kan ik de files wel downloaden met mget.

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Volgens msdn is het probleem de spatie, maar dat is natuurlijk de eerste plaats waar je keek toch?!

lpszSearchFile
[in] Pointer to a null-terminated string that specifies a valid directory path or file name for the FTP server's file system. The string can contain wildcards, but no blank spaces are allowed. If the value of lpszSearchFile is NULL or if it is an empty string, it will find the first file in the current directory on the server.

bron: http://msdn.microsoft.com...ions/ftpfindfirstfile.asp

[ Voor 0% gewijzigd door LordLarry op 18-10-2002 15:12 . Reden: bold ]

We adore chaos because we like to restore order - M.C. Escher


  • Pooh
  • Registratie: April 2001
  • Niet online

Pooh

Lees eens een boek

Volgens mij zit het probleem niet in de lange bestandsnaam, maar in de spatie. Je kunt 2 dingen proberen:

-Extra quotejes gebruiken: "\"knoppenbalk 5.jpg\""
-%20 gebruiken: "knoppenbalk\%205.jpg"

(Overigens zijn spaties in bestandsnamen sowieso evil. Gewoon niet, nooit, nergens gebruiken, ook niet als je OS er prima mee uit de voeten kan)

  • AaroN
  • Registratie: Februari 2001
  • Laatst online: 16-08-2023

AaroN

JayGTeam (213177)

[blaat]

Het lag dus toch aan de spatie :)

[ Voor 0% gewijzigd door AaroN op 18-10-2002 15:17 . Reden: blaat verwijderd ]

JayGTeam (213177)


Verwijderd

Topicstarter
De InternetCanonicalizeUrl() is de oplossing voor de spaties ( ook voor http ), feitelijk een replace voor alle spaties met %20. Er zijn nog wat meer mogelijkheden om niet "veilige" karakters te escapen maar ook dit werkt niet. Iemand anders ?

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Ik denk niet dat dat de oplossing is voor dit probleem, maar test het gewoon eens. Werkt het wel met lange bestandsnamen zonder spaties? Als dat zo is en je %20 werkt niet dat liegt de msdn toch echt niet en werkt het gewoon niet met spaties, klaar uit.

We adore chaos because we like to restore order - M.C. Escher


Verwijderd

Topicstarter
LordLarry schreef op 18 oktober 2002 @ 16:05:
Ik denk niet dat dat de oplossing is voor dit probleem, maar test het gewoon eens. Werkt het wel met lange bestandsnamen zonder spaties? Als dat zo is en je %20 werkt niet dat liegt de msdn toch echt niet en werkt het gewoon niet met spaties, klaar uit.
Klopt, het zijn niet de lange bestandsnamen die het probleem vormen maar wel de spaties. Hoe lossen andere ftp clients dit op, ik weet dat wsftp deze bestanden gewoon kan downloaden !

  • Pooh
  • Registratie: April 2001
  • Niet online

Pooh

Lees eens een boek

Verwijderd schreef op 18 oktober 2002 @ 16:15:
Klopt, het zijn niet de lange bestandsnamen die het probleem vormen maar wel de spaties. Hoe lossen andere ftp clients dit op, ik weet dat wsftp deze bestanden gewoon kan downloaden !
Heb je mijn oplossingen al geprobeerd? Zoja, waarom voldoen ze niet? :?

Verwijderd

Topicstarter
Poohbear schreef op 18 oktober 2002 @ 16:30:
[...]


Heb je mijn oplossingen al geprobeerd? Zoja, waarom voldoen ze niet? :?
Zowel de %20 ( InternetCanonicalizeUrl() ) als de extra qoutes zijn geen oplossing, tenminste hier op mijn Ms FTP server werkt dat niet.

  • Pooh
  • Registratie: April 2001
  • Niet online

Pooh

Lees eens een boek

Verwijderd schreef op 18 oktober 2002 @ 16:32:
Zowel de %20 ( InternetCanonicalizeUrl() ) als de extra qoutes zijn geen oplossing, tenminste hier op mijn Ms FTP server werkt dat niet.
En wat gebeurt er als je me de hand "%20" invoegt of je extra quotes invoegt? Wat gebeurt er als je een kale ftp-client gebruikt (vanaf de prompt ofzo) en met quotejes of %20's werkt? Wat voor foutmeldingen krijg je dan precies? (Ik neem aan dat je niet weer "550 /chn/1/knoppenbalk: The system cannot find the file specified. " krijgt, zeker niet met %20's? :? )

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Het ftp protocol kent geen %20, dat wil niet zeggen dat ms zijn functies zoals ftpfindfirst dat wel laat doen. Volgensmij gebruikt het ftp protocol "", maar daar ben ik niet zeker van. Wat die MS functies doen is gewoon een dir listing ophalen en die dan parsen. Tenzij je dat zelf wilt gaan doen ben je gewoon overgeleverd aan wat ftpfindfirst je aanbied.

Dat WS-FTp het wel kan zegt niets, die gebruikt dan gewoon geen ftpfindfirst. Ik denk ook dat die het ook gewoon allemaal zelf doet en helemaal geen inet api functies gebruikt.

Het is dan ook niet het ftp protocol dat hier het probleem direct is, maar de inet api ftpfindfirst

We adore chaos because we like to restore order - M.C. Escher


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Kan zo snel in het ftp-protocol niet vinden hoe een spatie geparsed moet worden dus ik ben geneigd met LordLarry eens te zijn, maar er staan wel referenties aan het telnet-protocol, wat zou inhouden dat je moet escapen met 0x1b (escape char)

Professionele website nodig?

Pagina: 1