【问题标题】:Why won't my console app work with 25 arguments or more?为什么我的控制台应用程序不能使用 25 个或更多参数?
【发布时间】:2010-10-29 07:36:07
【问题描述】:

我正在制作一个控制台应用程序,我将文件从资源管理器拖放到 .exe 中,它会根据我在程序逻辑中设置的规则将它们移动到适当的文件夹。

该程序运行良好,但是当我选择超过 25 个文件并将它们放到我的 .exe 上时,我得到一个错误:

Windows 无法访问指定的设备、路径或文件。您可能没有相应的权限来访问该项目。

如果我只从同一组中删除 24 个文件,它就可以正常工作。

我做错了什么?

【问题讨论】:

  • > 在运行 Microsoft Windows > XP 或更高版本的计算机上,可在命令 > 提示符下使用的 > 字符串的最大长度为 8191 个字符。 > 在运行 Microsoft Windows > 2000 或 Windows NT 4.0 的计算机上,您可以在命令提示符处使用 > 的最大 > 长度为 2047 > 个字符。我测试了它,是的,这就是我遇到的。谁能想到解决办法?

标签: c# command-line-arguments


【解决方案1】:

根据您的平台,您可能会遇到最大命令行长度。请参阅Here 了解更多信息。

“在运行 Microsoft Windows XP 或更高版本的计算机上,您可以在命令提示符处使用的最大字符串长度为 8191 个字符。在运行 Microsoft Windows 2000 或 Windows NT 4.0 的计算机上,您可以在命令提示符下使用的最大字符串长度在命令提示符下可以使用的是 2047 个字符。”

【讨论】:

  • 你打败了我。现在我想问题是我怎样才能绕过它?
  • 这对我来说似乎是正确的。您收到“找不到指定的路径等”错误的原因是它试图寻找部分文件名。我看到你标记了这个 C#。尝试在测试文件的循环上设置断点,有条件地仅在第 24 次或第 25 次迭代(或仅在 25.txt,即您放入的第 25 个文件)上触发。然后看看你是否得到了部分文件名。
  • 似乎是双重发布。如何四处走动?简单,管道。我不确定如何在 CMD 中执行此操作,但您可以在 Powershell 或 *nix shell 中执行类似操作: dir | MyProgram 这将列出目录的内容,然后将每个项目一次输入 MyProgram(当然,这就是您的应用程序)。
  • 我提出了一个新的更新问题,问我真正想要的是什么stackoverflow.com/questions/916794/…
【解决方案2】:

文件数是否导致超出命令行(以及参数)的最大长度,从而导致此错误?

【讨论】:

  • 可能就是我想问的问题
  • @Rob - 您的答案应该是评论,而不是作为答案发布。 -1
  • @divo - 我的理由:对于一个可以接受的新手来说,但是对于该网站的资深人士来说,发布一个重申 OP 已经说过的问题的问题是没有帮助的。
  • +1,所以答案被表述为一个问题,但是“导致超出命令行(以及参数)的最大长度”是正确的
  • @Ichiban - 错误,不。我会以我喜欢的任何方式表达我的答案。因为您不喜欢回答的措辞方式而给出 -1 对网站的目标有点适得其反,您不觉得吗?
【解决方案3】:

要回答后续问题,可能需要更多关于应用程序用途的信息,但如果可能,您可能会更改命令行参数以接受文件夹路径和模式以匹配所需的所有必要文件路由。或者将其更改为带有网格的 GUI 应用程序,您可以将其拖放到其中。

【讨论】:

  • 我希望避免这种情况。我的程序的雄辩部分(或者至少我认为是)是它不需要在后台运行它会以给定的参数启动,然后在完成时死亡。如果我创建了一个winform,我可以简单地将文件拖到winform上,我可以绕过它,但它为进程添加了一个步骤——另一个想法是有一个带有systemfilewatcher的文件夹,但它必须在后台运行
猜你喜欢
  • 1970-01-01
  • 2012-05-22
  • 1970-01-01
  • 2019-07-03
  • 2017-06-30
  • 2015-08-23
  • 2011-10-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多