为什么 C# 似乎部分未转义命令行参数?

2023-11-27

我试图将多个路径作为参数传递给控制台应用程序,但收到“路径中的非法字符”错误。参数的最后两个字符似乎出现了错误"C:\test\"对于转义的双引号。

例如,如果我用 C# 创建一个新的空控制台应用程序,如下所示:

static void Main(string[] args)
{
    Console.WriteLine(args[0]);
    Console.ReadLine();
}

并且,在“项目属性”->“调试”下,我添加了一个命令行参数,如下所示:

Project properties showing CLI Argument: "C:\test\"

然后我的输出看起来像这样:

Command prompt showing output: C:\test"

如果该值正在被评估/未转义,为什么\t不变成标签了?

如果该值没有被评估/未转义,为什么\"变成双引号?

(注意:我知道我可以通过例如修剪尾随反斜杠等来解决这个问题。我请求帮助理解为什么这些参数似乎是部分地评估)


诚然,这与 Microsoft C 命令行参数有关,但我已经测试过,C# 也遵循这些规则。命令行参数分为string args[]数组在传递给应用程序之前。

解析 C 命令行参数

  • 参数由空格分隔,空格可以是空格,也可以是制表符。

  • 用双引号括起来的字符串将被解释为单个参数,无论其中是否包含空格。带引号的字符串可以嵌入到参数中。请注意,插入符号 (^) 不会被识别为转义字符或分隔符。

  • 前面有反斜杠 \" 的双引号被解释为文字双引号 (")。

  • 反斜杠按字面意思解释,除非它们紧接在双引号之前。

  • 如果偶数个反斜杠后跟双引号,则每对反斜杠 (\) 都会在 argv 数组中放置一个反斜杠 (),并且双引号 (") 被解释为字符串分隔符。

  • 如果奇数个反斜杠后面跟着一个双引号,则每对反斜杠 (\) 都会在 argv 数组中放置一个反斜杠 (),并且双引号会被剩余的反斜杠解释为转义序列,从而导致要放置在 argv 中的文字双引号 (")。

这些规则似乎与您所看到的结果一致。

我运行以下控制台应用程序来测试这些规则:

static void Main(string[] args)
{
    foreach (string s in args)
    {
        Console.WriteLine(s);
    }
    Console.ReadLine();
}

使用以下命令行参数:

arg1 "arg2 arg3" arg4\" "arg5\"" arg6\\\"

Output:

arg1
arg2 arg3
arg4"
arg5"
arg6\"

您输入参数的原因似乎未转义是第一个双引号被解释为起始字符串分隔符,第二个双引号由前面的反斜杠转义并解释为文字双引号 - 而不是结束分隔符。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 C# 似乎部分未转义命令行参数? 的相关文章

  • 未提供参数时如何指定 C# System.Commandline 行为?

    在我的控制台应用程序中 当未提供控制台参数时 将执行我指定列表 在本例中为参数 3 的任何处理程序 调用该处理程序时 布尔参数设置为 false 但对我来说 根本不调用它更有意义 如何防止这种情况发生并显示帮助文本 using System
  • 如何在 .NET Framework 2.0 中模拟“Func<(Of <(TResult>)>) 委托”?

    我尝试使用这个类代码项目文章 http www codeproject com KB threads AsyncVar aspx在 VB NET 和 NET Framework 2 0 中 除了这一行之外 所有内容似乎都可以编译Privat
  • 确保 StreamReader 不会挂起等待数据

    下面的代码读取从 tcp 客户端流读取的所有内容 并且在下一次迭代中它将仅位于 Read 上 我假设正在等待数据 我如何确保它不会在没有任何内容可供读取时返回 我是否必须设置低超时 并在失败时响应异常 或者有更好的办法吗 TcpClient
  • 使用 Newtonsoft 和 C# 反序列化嵌套 JSON

    我正在尝试解析来自 Rest API 的 Json 响应 我可以获得很好的响应并创建了一些类模型 我正在使用 Newtonsoft 的 Json Net 我的响应中不断收到空值 并且不确定我的模型设置是否正确或缺少某些内容 例如 我想要获取
  • java.io.Serialized 在 C/C++ 中的等价物是什么?

    C C 的等价物是什么java io Serialized https docs oracle com javase 7 docs api java io Serializable html 有对序列化库的引用 用 C 序列化数据结构 ht
  • 使用接口有什么好处?

    使用接口有什么用 我听说它用来代替多重继承 并且还可以用它来完成数据隐藏 还有其他优点吗 哪些地方使用了接口 程序员如何识别需要该接口 有什么区别explicit interface implementation and implicit
  • 由 IHttpClientFactory 注入时模拟 HttpClient 处理程序

    我创建了一个自定义库 它会自动为依赖于特定服务的 Polly 策略设置HttpClient 这是使用以下方法完成的IServiceCollection扩展方法和类型化客户端方法 一个简化的例子 public static IHttpClie
  • 在 C 中初始化变量

    我知道有时如果你不初始化int 如果打印整数 您将得到一个随机数 但将所有内容初始化为零似乎有点愚蠢 我问这个问题是因为我正在评论我的 C 项目 而且我对缩进非常直接 并且它可以完全编译 90 90 谢谢 Stackoverflow 但我想
  • Qt - ubuntu中的串口名称

    我在 Ubuntu 上查找串行端口名称时遇到问题 如您所知 为了在 Windows 上读取串口 我们可以使用以下代码 serial gt setPortName com3 但是当我在 Ubuntu 上编译这段代码时 我无法使用这段代码 se
  • 如何在 32 位或 64 位配置中以编程方式运行任何 CPU .NET 可执行文件?

    我有一个可在 32 位和 64 位处理器上运行的 C 应用程序 我试图枚举给定系统上所有进程的模块 当尝试从 64 位应用程序枚举 32 位进程模块时 这会出现问题 Windows 或 NET 禁止它 我认为如果我可以从应用程序内部重新启动
  • 如何在 Xaml 文本中添加电子邮件链接?

    我在 Windows Phone 8 应用程序中有一些大文本 我希望其中有电子邮件链接 例如 mailto 功能 这是代码的一部分
  • C#:帮助理解 UML 类图中的 <>

    我目前正在做一个项目 我们必须从 UML 图编写代码 我了解 UML 类图的剖析 但我无法理解什么 lt
  • C# HashSet 只读解决方法

    这是示例代码 static class Store private static List
  • 如何禁用 fread() 中的缓冲?

    我正在使用 fread 和 fwrite 读取和写入套接字 我相信这些函数用于缓冲输入和输出 有什么方法可以在仍然使用这些功能的同时禁用缓冲吗 Edit 我正在构建一个远程桌面应用程序 远程客户端似乎 落后于服务器 我不知道可能是什么原因
  • 等待进程释放文件

    我如何等待文件空闲以便ss Save 可以用新的覆盖它吗 如果我紧密地运行两次 左右 我会得到一个generic GDI error
  • 动态添加 ASP.Net 控件

    我有一个存储过程 它根据数据库中存储的记录数返回多行 现在我想有一种方法来创建 div 带有包含该行值的控件的标记 如果从数据库返回 10 行 则 10 div 必须创建标签 我有下面的代码来从数据库中获取结果 但我不知道如何从这里继续 S
  • 为什么 gcc 抱怨“错误:模板参数 '0' 的类型 'intT' 取决于模板参数”?

    我的编译器是gcc 4 9 0 以下代码无法编译 template
  • 按 Esc 按键关闭 Ajax Modal 弹出窗口

    我已经使用 Ajax 显示了一个面板弹出窗口 我要做的是当用户按 Esc 键时关闭该窗口 这可能吗 如果有人知道这一点或以前做过这一点 请帮助我 Thanks 通过以下链接 您可以通过按退出按钮轻松关闭窗口 http www codepro
  • System.IO.FileNotFoundException:找不到网络路径。在 Windows 7 上使用 DirectoryEntry 对象时出现异常

    我正在尝试使用 DirectoryEntry 对象连接到远程 Windows 7 计算机 这是我的代码 DirectoryEntry obDirEntry new DirectoryEntry WinNT hostName hostName
  • 如何从 ODBC 连接获取可用表的列表?

    在 Excel 中 我可以转到 数据 gt 导入外部数据 gt 导入数据 然后选择要使用的数据源 然后在提供登录信息后 它会给我一个表格列表 我想知道如何使用 C 以编程方式获取该列表 您正在查询什么类型的数据源 SQL 服务器 使用权 看

随机推荐

  • 使用 processBuilder 执行 shell 命令并与其交互

    我正在尝试创建一个程序 允许我通过带有参数的终端 如果您想知道 则为树莓派的 OmxPlayer 执行命令 但我希望在启动后能够与它进行交互命令 例如我想做 omxplayer win x1 y1 x2 y2 然后可以按 p 暂停视频 音频
  • 如何只制作注册邀请函?

    使用 Meteor 帐户 以及accounts ui 有没有一种简单的方法可以只邀请新用户注册 例如 通过提供邀请链接或邀请码 我在 Meteor 文档中能找到的唯一相关内容是Meteor sendEnrollmentEmail但这并不能解
  • 如何通过连接表填充 has_many 中的字段

    我有一个关于活动记录关联的问题 参考 Rails 文档的这一部分 http guides rubyonrails org association basics html the has many through association 如果
  • 关闭 stdout 和 stdin 文件描述符后重新打开它们

    我正在编写一个函数 给定一个参数 该函数会将标准输出重定向到文件或从文件读取标准输入 为此 我关闭与 stdout 或 stdin 关联的文件描述符 以便当我打开文件时 它会在我刚刚关闭的描述符下打开 这是可行的 但问题是一旦完成 我需要将
  • 计算船只到海岸或海岸线的距离

    对于船只的 200M GPS 经度 纬度 坐标数据集 我想计算到最近陆地或海岸线的近似距离 作为一个名为 distance to shore 的函数 它将返回该海岸的距离和国家 地区 我使用的国家边界和海岸线形状文件来自 http www
  • 在这种情况下SQLite线程安全吗?

    我需要通过一个拥有数据库连接的单例对象从多个线程进行数据库访问操作 我从 SQLite3 的网站上读到 它说 sqlite3 结构只能在调用 sqlite3 open 来创建它的同一线程中使用 您无法在一个线程中打开数据库 然后将句柄传递给
  • 为什么在使用 Model.copy() 后出现“GurobiError:变量不在模型中”?

    我需要优化具有不同约束集的模型 但这些约束的子集对于每个模型都是相同的 我的想法是构建一个包含每次都需要的所有变量和所有约束的基本模型 但是 它看起来并不像 Gurobi Model copy 方法按照我想象的方式复制变量 这是我希望做的事
  • 安装旧版本的 R 包

    我正在尝试使用 Rpy2 和 ggplot2 但出现错误 经过网上一些搜索错误 我发现发生错误是因为ggplot2包中存在尚未反映在Rpy2中的更改 例如 参见这个帖子 编辑 链接现已失效 所以我现在需要安装旧版本的 ggplot2 这是我
  • .NET Core 相当于 Thread.Abort

    背景 我有一个Service抽象 每个服务都有自己的WorkItem 工作项能够从一些数据开始 该服务正在限制执行时间WorkItem 假设单个工作项最多可能需要 60 秒 在此之后 Service应该杀掉它 这段代码从 NET Frame
  • Android TimePickerDialog材质设计颜色

    我在我的应用程序中使用时间选择器对话框 我还使用 appcompat 来为我的应用程序提供材料设计主题 然而 该对话框保留默认的青色强调色 我的强调色是浅蓝色 所以在我的代码中我尝试将对话框主题设置为我自己的并且它可以工作接受它使其全屏显示
  • 获取 java.util.List 的泛型类型

    I have List
  • 如何使用 Node.js“执行”HTML+Javascript 页面

    这样 我就有了 Node js 脚本 我有一些 HTML 页面 其中包含带有 JavaScript jquery 的 HTML 如何加载它并获取该页面上 JavaScript 的执行结果 你可以检查zombie js项目 http zomb
  • (React) CSSTransition 与 css 模块

    我正在尝试在我的项目中实现 CSSTransition 到模式 问题是我正在使用 css 模块 我的模态的渲染方法 render return
  • 检测 html 表单是否被编辑的通用方法

    我有一个选项卡式 html 表单 从一个选项卡导航到另一选项卡时 即使数据没有更改 当前选项卡的数据也会保留 在数据库上 我想仅在编辑表单时才进行持久性调用 该表单可以包含任何类型的控件 不一定要通过键入一些文本来弄脏表单 但在日历控件中选
  • 如果为空则创建新实例的简写?

    在 Javascript 中我可以这样做 var myVar returnNull new MyObject 在 C 中 我目前正在这样做 var myVar returnObjectOrNull if myVar null myVar n
  • 在 mongodb 中存储赞成票/反对票

    我有一个收藏Posts and Users用户可以对每个帖子投赞成票 反对票 将其存储在 mongodb 数据库中以确保用户不能多次为给定文档投票的最佳方法是什么 我想出的最简单的 nosql ish 解决方案是存储在每个内部投票的 use
  • 跨平台网络 API [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我想知道是否有一个 API 可以在 Windows Mac 和 Linux 上运行网络 我想做一个2人可以通过TCP连接玩的纸牌游戏 有几个选项可以
  • 使用ngrx一次获取store的当前状态

    您好 我想知道是否有人知道如何在无需订阅的情况下获取商店的当前状态 我目前正在使用 ngrx 订阅商店并访问其状态以设置组件的属性 但由于我订阅了该属性 所以它会不断刷新 因此 我正在寻找一种仅获取此属性一次的方法 以便我可以显示数据而无需
  • Android 滑动布局来关闭

    我正在尝试制作一个可滑动的布局 这样你就可以像现在在谷歌中一样滑动它来关闭 我设法使用以下代码让它在诸如按钮之类的视图上工作 SwipeDismissTouchListener public class SwipeDismissTouchL
  • 为什么 C# 似乎部分未转义命令行参数?

    我试图将多个路径作为参数传递给控制台应用程序 但收到 路径中的非法字符 错误 参数的最后两个字符似乎出现了错误 C test 对于转义的双引号 例如 如果我用 C 创建一个新的空控制台应用程序 如下所示 static void Main s