【问题标题】:DirectoryInfo throwing a System.OverflowExceptionDirectoryInfo 引发 System.OverflowException
【发布时间】:2018-04-30 18:08:55
【问题描述】:

当我使用这样的网络路径构造一个新的 DirectoryInfo 时:

using Delimon.Win32.IO;

DirectoryInfo di = new DirectoryInfo(@"\\a\path\to\a\place\you\are\not\allowed\to\know")

我知道路径是正确的,因为当我复制粘贴时它会在我的浏览器中打开。但我收到一个错误:

“System.OverflowException:算术运算导致溢出。”

这是我能提供的所有调用堆栈信息。

System.OverflowException: Arithmetic operation resulted in an overflow.
at Delimon.Win32.IO.Helpers.GetFileInformation(String path)
at Delimon.Win32.IO.FileSystemInfo.Refresh()
at Delimon.Win32.IO.DirectoryInfo..ctor(String dir)

路径长度为 67 个字符。所以这条路并不长。

我找不到任何关于 System.OverflowException 的文档,该异常是由 DirectoryInfo 对象的构造引起的。

有什么帮助吗?

【问题讨论】:

  • 您确定您使用的是斜杠而不是反斜杠吗?反斜杠应该被转义,以防万一。
  • 如果不能发minimal reproducible example,看参考源和完整的调用栈是解决的办法。
  • 好了,知道您使用的是Delimon.Win32.IO.DirectoryInfo 非常重要,这不是我们都知道和喜爱的System.IO.DirectoryInfo。这似乎是 rather old and unmaintained(也没有 NuGet 包),因此其中的任何错误都可能无法修复。
  • gallery.technet.microsoft.com/…,你不是唯一一个有问题的人
  • 听起来与stackoverflow.com/questions/33893164/… 相似,编辑:我一直忘记在 cmets 上输入提交……无论如何,这听起来像是您用来访问长文件名的库的问题,你确定你需要吗?

标签: c# .net


【解决方案1】:

我刚刚得到了这个确切的错误

System.OverflowException: '算术运算导致溢出。'

并设法找出原因。

以下行给出了错误:

string[] files = Delimon.Win32.IO.Directory.GetFiles(@"d:\temp");

这一行来自我正在重写的旧应用程序。知道它在旧版本中有效,但在新版本中无效,我已经删除了新版本中的所有内容,并留下了一个空表单。我仍然收到错误。

然后我创建了一个新的空项目并尝试了其中的代码,并且成功了。因此,即使我删除了新应用程序中的所有内容,我仍然会收到错误消息。这表明设置有问题。于是我开始比较项目文件。

*.csproj 文件中,有这一行:

<Prefer32Bit>false</Prefer32Bit>

它既不在旧应用程序中,也不在新项目中。

似乎在创建新项目时,默认选中“首选 32 位”(Project -&gt; Properties -&gt; Build -&gt; General),但在我的新应用中,没有选中。我不记得自己取消选中它,所以我不知道它是如何取消选中的。一旦我检查了它,我就不再收到错误了。

【讨论】:

    【解决方案2】:

    我使用的是 Delimon.Win32.IO.DirectoryInfo,它显然是一个旧的、未维护的代码库。我应该一直在使用 System.IO.DirectoryInfo

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-02
      • 1970-01-01
      • 1970-01-01
      • 2012-10-05
      • 1970-01-01
      • 2018-11-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多