2010-08-31 33 views
4

我的程序接受輸入文件名作爲命令行參數,或者在拖放操作中,或者在資源管理器中通過單擊帶有與我的程序關聯的擴展名的文件名。如何在Delphi中使用空格處理參數?

的命令行和拖放做工精細,但它點擊在資源管理器中文件名導致的問題時,文件的文件路徑上有空格的點擊,如:

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

然後, ParamStr函數讓我回來:

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 

我怎樣才能最好地重組這些回到我需要的三個文件名?

回答

7

它可能是你的shell文件關聯,不包括「」對。

像這些的用於打開:

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

或與DDE消息:

[open("%1")] 
+0

就是這樣!我是這樣做的:RegistrySoftwareClasses.WriteString('Behold.ged \ shell \ open \ command','',extractfilepath(Application.Exename)+'behold.exe%1',並且我需要在%1周圍「」 – lkessler 2010-08-31 03:15:31

+0

你知道如何在程序的一個實例中打開多個文件來打開它?請參閱:http://stackoverflow.com/questions/3605903/how-can-i-get-my-file-association-to-open -multiple-文件-IN-A-單程序研究院 – lkessler 2010-08-31 04:28:23

3

應該引用帶有空格的命令行參數,例如文件名。這使得param解析器意識到它應該讓它們保持在一起。如果用戶沒有引用文件名,這是操作員錯誤。

另一方面,如果拖放系統正在這樣做,那麼您的拖放庫中就存在一個錯誤,您需要與任何創建它的人交談。但是,我有點困惑,至於爲什麼拖放操作與ParamStr混淆。這應該只能通過調用時傳遞給程序的參數來設置,而不是一旦啓動並運行。也許我錯過了什麼?

+0

糟糕。這並不是一拖再拖。拖放功能正常。當我的應用程序與它關聯時,它會點擊該文件。我會編輯我的問題來反映這一點。 – lkessler 2010-08-31 00:52:30

2

我使用CmdLineHelper單元,從here

+0

感謝您指出該實用程序。我試着去嘗試,但是弗朗索瓦的答案解決了我的問題。 – lkessler 2010-08-31 03:20:55

相關問題