CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  C#

static void Main(string[] args)问题

楼主yuhongwei(不会的太多)2005-01-19 13:12:03 在 .NET技术 / C# 提问

static   void   Main(string[]   args)中为什么传递近来的args中双引号"总给去掉了呢?  
   
  比如"e:\Program   Files\a.txt"传入,出来引号就没有了,怎么样把引号给加上? 问题点数:20、回复次数:20Top

1 楼yuhongwei(不会的太多)回复于 2005-01-19 13:14:18 得分 0

自己up先Top

2 楼FJGoodGood(_FJ_强中强)回复于 2005-01-19 13:15:47 得分 2

要想传入双引号,用两个连续的双引号试试,例如:""abc""   ,得到   "abc"Top

3 楼yuhongwei(不会的太多)回复于 2005-01-19 13:18:28 得分 0

帮帮忙Top

4 楼lyvvvv(lyvvvv)回复于 2005-01-19 13:18:40 得分 2

"\"e:\Program   Files\a.txt\""Top

5 楼lyvvvv(lyvvvv)回复于 2005-01-19 13:21:13 得分 1

"\"e:\Program   Files\a.txt\""Top

6 楼hnhl(荒凉)回复于 2005-01-19 13:26:51 得分 1

同意楼上Top

7 楼yuhongwei(不会的太多)回复于 2005-01-19 13:26:58 得分 0

可是如果客户输入的就是"e:\Program   Files\a.txt",程序中如何判断?Top

8 楼FJGoodGood(_FJ_强中强)回复于 2005-01-19 13:27:31 得分 1

果然是用\作转义,例如:   "\"abc\""   得到   "abc",   楼上正解!Top

9 楼yuhongwei(不会的太多)回复于 2005-01-19 13:30:07 得分 0

可是如果客户输入的就是"e:\Program   Files\a.txt",程序中如何判断是否输入了双引号?  
  Top

10 楼CopyS(copys)回复于 2005-01-19 13:31:22 得分 1

同意楼上,把用户输入进行容错处理(进行转义)。Top

11 楼yuhongwei(不会的太多)回复于 2005-01-19 13:33:02 得分 0

如何把用户输入进行容错处理(进行转义)?Top

12 楼FJGoodGood(_FJ_强中强)回复于 2005-01-19 13:33:11 得分 1

if   (args[0].IndexOf("\"")   >=   0)  
  {  
          //   输入了双引号  
  }Top

13 楼Ivony(授人以鱼不如授人以渔,上海谋生)回复于 2005-01-19 13:34:52 得分 2

如果客户输入"e:\Program   Files\a.txt"  
  就会被解释成:  
  args[0]   =   "e:\Program   Files\a.txt";  
  如果客户输入e:\Program   Files\a.txt  
  就会被解释成:  
  args[0]   =   "e:\Program";  
  args[1]   =   "Files\a.txt";  
   
  引号本来就是避免参数中的空格被解释成分隔符的。Top

14 楼CopyS(copys)回复于 2005-01-19 13:40:08 得分 1

长见识,那么如果输入都类似于"e:\Program   Files\a.txt",只能在程序中写死了,进行判断了   。Top

15 楼yuhongwei(不会的太多)回复于 2005-01-19 13:40:08 得分 0

FJGoodGood(_FJ_强中强)   :  
  if   (args[0].IndexOf("\"")   >=   0)  
  {  
          //   输入了双引号  
  }  
   
  查找不到双引号  
  =========================  
  Ivony()    
  我怎么知道用户输入的参数中是否含有双引号?Top

16 楼luyiping(路亦平)回复于 2005-01-19 13:47:03 得分 2

试试传下面这个,前面加个@  
    @"e:\Program   Files\a.txt"Top

17 楼fsonly(FSG)回复于 2005-01-19 14:06:05 得分 1

没有必要性呀,自己程序内加上不就OK了么?Top

18 楼Ivony(授人以鱼不如授人以渔,上海谋生)回复于 2005-01-19 14:07:36 得分 5

=========================  
  Ivony()    
  我怎么知道用户输入的参数中是否含有双引号?  
   
   
  无解,双引号禁止作为命令行的参数。Top

19 楼yuhongwei(不会的太多)回复于 2005-01-19 15:15:13 得分 0

谢谢,揭帖。Top

20 楼Ivony(授人以鱼不如授人以渔,上海谋生)回复于 2005-01-19 15:25:01 得分 0

这个东西会对你有帮助。  
   
  启动   Windows   命令解释程序一个新的实例  
   
  CMD   [/A   |   /U]   [/Q]   [/D]   [/E:ON   |   /E:OFF]   [/F:ON   |   /F:OFF]   [/V:ON   |   /V:OFF]  
          [[/S]   [/C   |   /K]   string]  
   
  /C             执行字符串指定的命令然后中止  
  /K             执行字符串指定的命令但保留  
  /S             在   /C   或   /K   后修改字符串处理(见下)  
  /Q             关闭回显  
  /D             从注册表中停用执行   AutoRun   命令(见下)  
  /A             使向内部管道或文件命令的输出成为   ANSI  
  /U             使向内部管道或文件命令的输出成为   Unicode  
  /T:fg       设置前景/背景颜色(详细信息,请见   COLOR   /?)  
  /E:ON       启用命令扩展(见下)  
  /E:OFF     停用命令扩展(见下)  
  /F:ON       启用文件和目录名称完成字符(见下)  
  /F:OFF     停用文件和目录名称完成字符(见下)  
  /V:ON       将   !   作为定界符启动延缓环境变量扩展。如:   /V:ON   会  
                  允许   !var!   在执行时允许   !var!   扩展变量   var。var   语法  
                  在输入时扩展变量,这与在一个   FOR   循环内不同。  
  /V:OFF     停用延迟环境扩展。  
   
  请注意,如果字符串有引号,可以接受用命令分隔符   '&&'   隔开  
  的多个命令。并且,由于兼容原因,/X   与   /E:ON   相同,/Y   与  
  /E:OFF   相同,并且   /R   与   /C   相同。忽略任何其他命令行开关。  
   
  如果指定了   /C   或   /K,命令行开关后的命令行其余部分将作为命令行处  
  理;在这种情况下,会使用下列逻辑处理引号字符("):  
   
          1.     如果符合下列所有条件,那么在命令行上的引号字符将被  
                  保留:  
   
                  -   不带   /S   命令行开关  
                  -   整整两个引号字符  
                  -   在两个引号字符之间没有特殊字符,特殊字符为下列中的  
                      一个:   <>()@^|  
                  -   在两个引号字符之间有至少一个空白字符  
                  -   在两个引号字符之间有至少一个可执行文件的名称。  
   
          2.     否则,老办法是,看第一个字符是否是一个引号字符,如果  
                  是,舍去开头的字符并删除命令行上的最后一个引号字符,  
                  保留最后一个引号字符之后的文字。  
   
  如果   /D   未在命令行上被指定,当   CMD.EXE   开始时,它会寻找  
  以下   REG_SZ/REG_EXPAND_SZ   注册表变量。如果其中一个或  
  两个都存在,这两个变量会先被执行。  
   
          HKEY_LOCAL_MACHINE\Software\Microsoft\Command   Processor\AutoRun  
   
                  和/或  
   
          HKEY_CURRENT_USER\Software\Microsoft\Command   Processor\AutoRun  
   
  命令扩展是按默认值启用的。您也可以使用   /E:OFF,为某一  
  特定调用而停用扩展。您可以在机器上和/或用户登录会话上  
  启用或停用   CMD.EXE   所有调用的扩展,这要通过设置使用  
  REGEDT.EXE   的注册表中的一个或两个   REG_DWORD   值:  
   
          HKEY_LOCAL_MACHINE\Software\Microsoft\Command   Processor\EnableExtensions  
   
                  和/或  
   
          HKEY_CURRENT_USER\Software\Microsoft\Command   Processor\EnableExtensions  
   
  到   0x1   或   0x0。用户特定设置比机器设置有优先权。命令行  
  开关比注册表设置有优先权。  
   
  命令扩展包括对下列命令所做的更改和/或添加:  
   
          DEL   或   ERASE  
          COLOR  
          CD   或   CHDIR  
          MD   或   MKDIR  
          PROMPT  
          PUSHD  
          POPD  
          SET  
          SETLOCAL  
          ENDLOCAL  
          IF  
          FOR  
          CALL  
          SHIFT  
          GOTO  
          START   (同时包括对外部命令调用所做的更改)  
          ASSOC  
          FTYPE  
   
  有关特定详细信息,请键入   commandname   /?   查看。  
   
  延迟环境变量扩展不按默认值启用。您可以用/V:ON   或   /V:OFF  
  开关,为   CMD.EXE   的某个调用而启用或停用延迟环境变量扩展。  
  您可以在机器上和/或用户登录会话上启用或停用   CMD.EXE   所有  
  调用的延迟扩展,这要通过设置使用   REGEDT.EXE   的注册表中的  
  一个或两个   REG_DWORD   值:  
   
          HKEY_LOCAL_MACHINE\Software\Microsoft\Command   Processor\DelayedExpansion  
   
                  和/或  
   
          HKEY_CURRENT_USER\Software\Microsoft\Command   Processor\DelayedExpansion  
   
  到   0x1   或   0x0。用户特定设置比机器设置有优先权。命令行开关  
  比注册表设置有优先权。  
   
  如果延迟环境变量扩展被启用,惊叹号字符可在执行时间,被用来  
  代替一个环境变量的数值。  
   
  您可以用   /F:ON   或   /F:OFF   开关为   CMD.EXE   的某个  
  调用而启用或禁用文件名完成。您可以在计算上和/或  
  用户登录会话上启用或禁用   CMD.EXE   所有调用的完成,  
  这可以通过使用   REGEDIT.EXE   设置注册表中的下列  
    REG_DWORD   的全部或其中之一:  
   
          HKEY_LOCAL_MACHINE\Software\Microsoft\Command   Processor\CompletionChar  
          HKEY_LOCAL_MACHINE\Software\Microsoft\Command   Processor\PathCompletionChar  
   
                  和/或  
   
          HKEY_CURRENT_USER\Software\Microsoft\Command   Processor\CompletionChar  
          HKEY_CURRENT_USER\Software\Microsoft\Command   Processor\PathCompletionChar  
   
  由一个控制字符的十六进制值作为一个特定参数(例如,0x4  
  是Ctrl-D,0x6   是   Ctrl-F)。用户特定设置优先于机器设置。  
  命令行开关优先于注册表设置。  
   
  如果完成是用   /F:ON   开关启用的,两个要使用的控制符是:  
  目录名完成用   Ctrl-D,文件名完成用   Ctrl-F。要停用  
  注册表中的某个字符,请用空格(0x20)的数值,因为此字符  
  不是控制字符。  
   
  如果键入两个控制字符中的一个,完成会被调用。完成功能将  
  路径字符串带到光标的左边,如果没有通配符,将通配符附加  
  到左边,并建立相符的路径列表。然后,显示第一个相符的路  
  径。如果没有相符的路径,则发出嘟嘟声,不影响显示。之后,  
  重复按同一个控制字符会循环显示相符路径的列表。将   Shift  
  键跟控制字符同时按下,会倒着显示列表。如果对该行进行了  
  任何编辑,并再次按下控制字符,保存的相符路径的列表会被  
  丢弃,新的会被生成。如果在文件和目录名完成之间切换,会  
  发生同样现象。两个控制字符之间的唯一区别是文件完成字符  
  符合文件和目录名,而目录完成字符只符合目录名。如果文件  
  完成被用于内置式目录命令(CD、MD   或   RD),就会使用目录  
  完成。  
  用引号将相符路径括起来,完成代码可以正确处理含有空格  
  或其他特殊字符的文件名。同时,如果备份,然后从行内调用  
  文件完成,完成被调用时位于光标右方的文字会被调用。  
   
  需要引号的特殊字符是:  
            <space>  
            &()[]{}^=;!'+,`~Top

相关问题

  • static void Main(string[] args)和static void Main()有什么区别啊?
  • 郁闷的问题,static void Main(string[] args) 中的args
  • public static void main(String [] args)中的string[] args是用来干什么的?
  • public static void main(String args[]) throws IOException中,throws IOException是什么意思?
  • 定义了public static void main(String args[]) 怎么接受不了输入的字符串?
  • 求助:void 函数名(..., params String[] args)
  • 曾看过很多程序,[STAThread]static void Main(string[] args) {}的“[STAThread]”表示什么意思?为什么用中括号括住呢?
  • 问一个很蠢的问题:如:void main(String[] args);为什么一定要带上(如String[] args)参数
  • public static void main(String args[]){...},父类与子类同时定义有这样的main方法,但在子类中运行main时,程序却跑到父类的main中执
  • 请教:关于 main(String[] args)

关键词

  • 字符
  • 扩展
  • 命令行
  • 文件
  • 用户
  • 延迟
  • 执行
  • 文件名
  • 双引号
  • 引号

得分解答快速导航

  • 帖主:yuhongwei
  • FJGoodGood
  • lyvvvv
  • lyvvvv
  • hnhl
  • FJGoodGood
  • CopyS
  • FJGoodGood
  • Ivony
  • CopyS
  • luyiping
  • fsonly
  • Ivony

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo