我正在尝试将文件路径传递给C# Console Application
,但是当它到达控制台应用程序时,该字符串存在问题。
如果我从命令行运行我的应用程序,使用文件路径参数:
MyApp "C:\Users\DevDave\Documents\Visual Studio 2012\Projects\MyProject\"
弹出一个Windows对话框并通知我我的应用程序已停止工作,当我单击Debug选项时,我可以看到args[0]
的结果是:
C:\ Users \ DevDave \ Documents \ Visual Studio 2012 \ Projects \ MyProject“
注意最后还有一个尾随引用。
如果我传递第二个论点:
MyApp "C:\Users\DevDave\Documents\Visual Studio 2012\Projects\MyProject\" "any old string"
我再次收到错误,在调试中查看后,我看到args [0]是:
C:\ Users \ DevDave \ Documents \ Visual Studio 2012 \ Projects \ MyProject“any
我很困惑为什么会这样。我唯一的猜测是,字符串中的反斜杠是否会导致某些字符串的转义序列? 修改:我注意到上面的字符串示例中也发生了同样的情况!这似乎是“造成问题。
我只想传递当前解决方案目录的文件路径,并使用$(SolutionDir)从预构建事件调用我的应用程序,并且知道我可以通过其他方式获取当前解决方案的路径。但这是最简单的,我很好奇为什么它不能按预期工作。
答案 0 :(得分:5)
是的,命令行参数的规则有点模糊。
\
是转义字符,您可以使用它来转义引号("
)。你必须逃避反斜杠,但只有当它在引用之前。所以使用(注意最后的'\\'):
MyApp "C:\Users\DevDave\Documents\Visual Studio 2012\Projects\MyProject\\"
或者,更简单,但你必须以某种方式在C#中处理它:
MyApp "C:\Users\DevDave\Documents\Visual Studio 2012\Projects\MyProject"
答案 1 :(得分:1)
这就是为什么在路径中使用/
总是更好
"C:/Users/DevDave/Documents/Visual Studio 2012/Projects/MyProject/" "any old string"
看看:http://en.wikipedia.org/wiki/Path_(computing),您可以在路径中同时使用\
和/
,但如果您想要任何shell兼容性,我建议使用/
答案 2 :(得分:1)
MyApp之后的任何内容都将成为第一个参数(args [0])。在您的情况下,第一个参数是"C:\Users\DevDave\Documents\Visual Studio 2012\Projects\MyProject\"
。此外,字符串末尾的引号似乎发生,因为\"
表示您想要转义引号并将其写为字符串。在这种情况下,引用不是关闭字符串。这就是你的args [0]是MyApp
如果你不想改变报价并在其背后留下斜线,你应该\\"
你可以尝试这个并告诉我会发生什么:
MyApp "C:\Users\DevDave\Documents\Visual Studio 2012\Projects\MyProject\\"
(看看双斜线)
希望它有所帮助。
答案 3 :(得分:0)
继续Henk的回答,并选择在路径的末尾添加\
,然后:
如果您选择在Henk的答案中选择此代码来破解该错误("更简单,但您必须在C#中以某种方式处理它:"),那么您应该意识到会发生的一些错误:
args [0]只会被设置,即使你传递了多个参数.args的长度将等于1.所以你必须将args [0]分成多个部分供你的黑客使用。 / p>
如果"
字符位于您分割的片段的末尾,则必须将\
字符替换为function defaultValueDirective() {
return {
restrict: 'A',
controller: [
'$scope', '$attrs', '$parse',
function ($scope, $attrs, $parse) {
var getter = $parse($attrs.ngModel);
var setter = getter.assign;
var value = getter();
if (value === undefined || value === null) {
var defaultValueGetter = $parse($attrs.defaultValue);
setter($scope, defaultValueGetter());
}
}
]
}
}
。