2010-08-31 14 views
4

Mon programme accepte les noms de fichier d'entrée soit en tant que paramètres de ligne de commande ou dans une opération de glisser-déposer ou dans l'Explorateur en cliquant sur les noms de fichiers avec une extension qui est associée à mon programme.Comment puis-je gérer les paramètres avec des espaces dans Delphi?

La ligne de commande et glisser-déposer le travail bien, mais il est en cliquant sur les noms de fichiers dans l'Explorateur qui provoque des problèmes lorsque les chemins de fichiers des fichiers cliqué sur le bouton avoir des espaces en eux, par exemple:

c:\temp\file one.txt 
c:\my directory\filetwo.txt 
c:\my directory\file three.txt 

puis, la fonction ParamStr me redonne:

ParamStr(1): c:\temp\file 
ParamStr(2): one.txt 
ParamStr(3): c:\my 
ParamStr(4): directory\filetwo.txt 
ParamStr(5): c:\my 
ParamStr(6): directory\file 
ParamStr(7): three.txt 

Comment puis-je mieux reconstituer ces nouveau dans les trois noms que j'ai besoin?

Répondre

7

Il se peut que votre association de fichier shell n'inclue pas la paire "".

comme ceux-ci pour l'ouverture:

"C:\Program Files\WinRAR\WinRAR.exe" "%1" 

ou avec le message DDE:

[open("%1")] 
+0

C'était tout! Je faisais ceci: RegistrySoftwareClasses.WriteString ('Behold.ged \ shell \ ouvrir \ commande', '', extractfilepath (Application.Exename) + 'behold.exe% 1' et j'ai eu besoin de "" autour du% 1 – lkessler

+0

vous savez comment je peux obtenir plusieurs fichiers à ouvrir dans une instance du programme faisant cela? Voir: http://stackoverflow.com/questions/3605903/how-can-i-get-my-file-association-to-open -multiples-fichiers-dans-un-seul-programme-inst – lkessler

3

Les paramètres de ligne de commande contenant des espaces, tels que les noms de fichiers, doivent être indiqués. Cela fait que le parseur de param se rend compte qu'il est supposé les garder ensemble. Si l'utilisateur ne cite pas le nom de fichier, c'est une erreur de l'opérateur. Si un système de glisser-déposer est en train de faire cela, d'un autre côté, vous avez un bug dans votre bibliothèque de glisser-déposer et vous devez parler à celui qui l'a créé. Cependant, je suis un peu confus quant aux raisons pour lesquelles les opérations de glisser-déposer jouent avec ParamStr. Cela ne devrait être défini que par les paramètres passés à votre programme au moment où il est appelé, pas une fois qu'il est opérationnel. Peut-être qu'il me manque quelque chose? J'utilise l'unité CmdLineHelper, de here

+0

Whoops. Ce n'est pas glisser-déposer du tout. Glisser-Déposer fonctionne bien. C'est en cliquant sur le fichier lorsque mon application est associée. Je vais modifier ma question pour refléter cela. – lkessler

2

+0

Merci d'avoir signalé cette utilité. J'allais l'essayer, mais la réponse de François a résolu mon problème. – lkessler