【问题标题】:Passing path as arguments将路径作为参数传递
【发布时间】:2013-01-25 19:30:10
【问题描述】:

我正在尝试将路径字符串作为参数传递给 Windows 窗体应用程序。我知道我需要添加引号。我目前正在使用以下代码。

DirectoryInfo info = new DirectoryInfo(path);
string.Format("\"{0}\"", info.FullName);

上面的代码在路径类似于D:\My Development\GitRepositories 时有效。但是,当我通过C:\ 时,我得到的参数是C:",因为最后一个\ 字符用作转义字符。

我做错了吗?另外,有没有更好的方法来做到这一点?

提前致谢。

【问题讨论】:

  • 需要对转义字符进行转义,"\\" 会变成"\"
  • 问题不在于您发布的代码,而在于使用string.Format("\"{0}\"", info.FullName); 结果的代码。发布它,我们会尝试找出您做错了什么。
  • 您没有分配字符串格式的结果。你应该这样做:string result = string.Format("\"{0}\"", info.FullName);
  • 三个cmets和三个答案,唯一一个理解问题的人太神秘了,无法理解。如果您知道您的路径将以“\”结尾,请将其加倍:string.Format("\"{0}\\\"", info.FullName); 然后子进程会将第一个斜杠视为转义第二个斜杠,而不是后面的结束引号。

标签: c# command-line-arguments


【解决方案1】:

尝试使用 ProcessStartInfo 和 Process 类并生成您的应用程序。这也将让您更好地控制它的启动方式以及它返回的任何输出或错误。 (当然,此示例中并未显示所有选项)

DirectoryInfo info = new DirectoryInfo(path);

ProcessStartInfo processInfo = new ProcessStartInfo();
processInfo.FileName = [you WinForms app];
processInfo.Arguments = String.Format(@"""{0}""", info.FullName);
using (Process process = Process.Start(processInfo))
{
  process.WaitForExit();
}

【讨论】:

    【解决方案2】:

    您的问题是在 C# 中转义,您可以用第二个反斜杠掩盖所有反斜杠,或者在第一个引号之前添加一个 at 符号 (@):

    string option1="c:\\your\\full\\path\\";
    string option2=@"c:\your\full\path\";
    

    无论如何,并非在所有情况下都将引号包含在字符串中。在大多数情况下,仅当您需要启动外部程序时才需要此作为参数。

    【讨论】:

      【解决方案3】:

      CommandLineArgspace 分隔的,因此您需要使用" 传递命令参数

      这意味着如果 Path = C:\My folder\ 将作为两个参数发送,但如果它作为 "C:\My Folder\" 传递,则它是一个参数。

      所以

      string commandArg = string.Format("\"{0}\"", info.FullName)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-12-02
        • 2014-08-12
        • 1970-01-01
        • 1970-01-01
        • 2013-02-26
        • 2014-05-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多