甩分大讨论,关于命令行的问题

cdws222 2003-02-16 06:14:57
大家都知道BCB中可以用ParamCount和ParamStr这两个VCL函数处理命令行字符串,但他们有问题,比如处理C:\program files\Borland\这样的参数时就会出错,因为这个参数中有一个空格,VCL把它们当成两个参数了,因此程序会得到错误的值,如果说这样还好办,只要把它们连起来就行了,那么当参数中的空格是两个而且连续的呢,就像c:\program files这样可就不行了。也有人会说:“只要把参数用“”引起来就行了”,不错,这样的确会解决这个问题,但如果参数是Windows给的呢?比如是在文件夹窗口中双击一个文件,而这个文件的文件名作为命令行参数传到了你的程序中,这时WINDOWS是不会给你加引号的,因此必须聚集大家的力量寻找一个可行的解决方案.

请大家多多帮忙!
...全文
27 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
jishiping 2003-02-17
  • 打赏
  • 举报
回复
我不可能总在网上,也不可能看到并回答所有的问题,所以以前没有看到你的问题是很正常的,倒不是分数多少的问题。对于0分的问题,我也有回答的。
cdws222 2003-02-16
  • 打赏
  • 举报
回复
对呀对呀,还是jishiping说得对

我以前也问过好多这样的问题,但jishiping以前怎么就没回答呢??????
不会是因为这次分多吧
呵呵

其实第二个方法我是知道的,而且已经使用了,但第一个方法确是没想到的.呵呵只要给%1加上引号就可以了,这么简单居然没想到.
gfh_79_0 2003-02-16
  • 打赏
  • 举报
回复
学习
netsys2 2003-02-16
  • 打赏
  • 举报
回复
收藏
jishiping 2003-02-16
  • 打赏
  • 举报
回复
另外说明一下,记事本的设定,两边没有双引号,这时记事本的处理,就是将
整个命令行参数中,第一个参数后面的所有字符作为文件名。好在记事本只能
打开一个文件,所有这样处理也是可以理解的。你可以做一个测试,在当前目
录下,建3个文件,文件名分别为"123" "45.txt" "123 45.txt",然后执行
“Notepad.exe 123 45.txt”,你就会发现记事本打开的是"123 45.txt",而
不是"123"这个文件。对于能够同时处理多个命令行参数的程序,这样的处理
就是不对的。所以如果程序支持多个命令行参数,必须在每个参数两边加双引
号。如:"C:\Test.exe" "%1" "%2" "%3"这样写。
jishiping 2003-02-16
  • 打赏
  • 举报
回复
这不是VCL的问题,而是Windows对命令行参数的处理就是这样的。对于含有空
格的长文件名,必须在文件名2边加双引号。至于你说的“比如是在文件夹窗
口中双击一个文件,而这个文件的文件名作为命令行参数传到了你的程序中,
这时WINDOWS是不会给你加引号的”,其实你的理解是错误的。WINDOWS会不会
加不加引号,这在于你设定文件关联时的写法。比如,“小画家”的文件关联
的写法是(在HKEY_CLASSES_ROOT\Paint.Picture\shell\open\command下):
"C:\WINNT\System32\mspaint.exe" "%1"
注意上面的%1的2边有双引号,这样Windows将文件名传给“小画家”时,命令
行参数就包含双引号了。
cdws222 2003-02-16
  • 打赏
  • 举报
回复
既使用GetCommandLine也不能区分呀
alsoran 2003-02-16
  • 打赏
  • 举报
回复
,,
halibut 2003-02-16
  • 打赏
  • 举报
回复
UP!
COKING 2003-02-16
  • 打赏
  • 举报
回复
GetCommandLine

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧