[VB6]Filenames met en zonder spaties uit de commandline hale

Pagina: 1
Acties:

  • WoutF
  • Registratie: Maart 2000
  • Laatst online: 08:57

WoutF

Hoofdredacteur
Topicstarter
Hoi :)

Ik ben bezig aan een klein FTP upload programmatje. Na installatie kan je server profielen aanmaken, en er word dan per server een link in het Send To menu neergezet. Als je dan een file via Send To-->FTPSender upload wordt na de upload de URL op het clipboard gezet. Ik gebruik het zelf veel als ik snel even en JPG op een forum wil posten.

Anyway, het programma werkt prima! op 1 ding na. Soms wil ik ook meerdere files uploaden, dus multi-file support heb ik ook ingebakken. En daar zit het probleem.

Als je files via het Send To menu naar een exe stuurt worden de filenames gewoon als command line argument meegegeven.

Als alle files GEEN spaties in de pathnames hebben is het geen probleem.
Ik split de string dan gewoon op whitespaces en hou dan een array met de bestandsnamen over.

Als alle files WEL spaties in de pathnames hebben is het ook geen probleem.
Windows enclosed dan elke filename tussen aanhalingstekens.
Ik split de string dan gewoon op (chr34) en hou dan ook een array met filenames over.

Het probleem is als de gebruiker een aantal bestanden selecteert, sommige met, en sommige zonder spaties in de filenames.
De Command string komt er dan bijvoorbeeld zo uit te zien
code:
1
"c:\test\file with spaces.jpg" C:\test\file.jpg "c:\test\another file with spaces.jpg" c:\test\testfile2.jpg


Ik kan wel een beetje proggen, en tot nu toe werkt alles perfekt. Maar ik mis even het inzicht en logisch denkvermogen om een oplossing te bedenken. Hoe kan ik uit een string zoals de bovenstaande alle filenames in een array krijgen?

  • BestTested!
  • Registratie: Oktober 2003
  • Laatst online: 09:11
Wout schreef op maandag 26 juni 2006 @ 16:05:
...........

Het probleem is als de gebruiker een aantal bestanden selecteert, sommige met, en sommige zonder spaties in de filenames.
De Command string komt er dan bijvoorbeeld zo uit te zien
code:
1
"c:\test\file with spaces.jpg" C:\test\file.jpg "c:\test\another file with spaces.jpg" c:\test\testfile2.jpg


Ik kan wel een beetje proggen, en tot nu toe werkt alles perfekt. Maar ik mis even het inzicht en logisch denkvermogen om een oplossing te bedenken. Hoe kan ik uit een string zoals de bovenstaande alle filenames in een array krijgen?
Even uit de losse pols wat pseudo:
code:
1
2
3
4
5
6
7
8
9
10
11
nrOfFiles = 0
do for i = 0 to lenghte(commandLine)
  if commandLone.charAt(i) == char(34) then
     fileArray(nrOfFiles) = commandLine.substring(i, commandLine.getIndexOf(char(34)))
     i = commandLine.getIndexOf(char(34))
  else
    fileArray(nrOfFiles) = commandLine.substring(i, commandLine.getIndexOf(spatie)))
    i = commandLine.getIndexOf(spatie)
  end if
  nrOfFiles++
next i


Je kijkt dus eerst of je string begint me een ", als dit het geval is zoek je naar de volgende " en maake je hiervan je filename, als het met iets anders begint, dan splits je weer op, op de volgende spatie

  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Iets als volgt (pseudo):
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
buf = ""
count = 0
while pos < len(str)
 if str(pos) = chr(34) then
    while str(pos+1) <> chr(34)
      buf = str(pos+1)
      pos = pos + 1
    end while
 else
   while str(pos+1) <> spatie
      buf = str(pos+1)
      pos = pos + 1
   end while
 end if
 count = count + 1
 result(count) = buf
 pos = pos + 1
end while


Kan nog wel wat tweaking gebruiken, maar is een beginnetje wellicht.

[ Voor 63% gewijzigd door bigbeng op 26-06-2006 16:29 ]


  • WoutF
  • Registratie: Maart 2000
  • Laatst online: 08:57

WoutF

Hoofdredacteur
Topicstarter
Bedankt voor het duwtje in de rug mensen! ik heb het werkende