【问题标题】:System.IO.FileInfo works OK in Visual Studio 2008 but not in Visual Studio 2012System.IO.FileInfo 在 Visual Studio 2008 中可以正常工作,但在 Visual Studio 2012 中无法正常工作
【发布时间】:2014-01-13 15:36:28
【问题描述】:

我最近从 Visual Studio 2008 升级到 Visual Studio 2012。

我正在处理一个旧的(和复杂的)代码,并且升级出奇地好,除了这个功能:

FI = New System.IO.FileInfo("X:\MyFolder\MyFile.sim")

(其中“X:\”是一个映射的外部驱动器)

  • 在 Visual Studio 2008 中:FI.ExistsTrue
  • 在 Visual Studio 2012 中:FI.ExistsFalse

我对此感到很困惑。有人知道我该如何解决这个问题吗?

【问题讨论】:

  • 您的TargetFramework 是否从VS2008 更改为VS2012?例如。你还在 VS2012 中定位 NET20NET30 吗?
  • 您是以管理员身份运行 VS2008 还是 VS2012,而不是另一个?当您以管理员身份运行时,您的会话中没有相同的映射网络驱动器...
  • @ThomasLevesque:我尝试以管理员身份运行 VS2012,但并没有改变行为。
  • @TheGreatCO :很好,我的项目现在自动针对 NET4.0(在 VS2008->VS2012 自动转换之后),而在 VS2008 中我使用的是 NET3.5。我已经更改了 through this HowTo,但现在这个更改有一个副作用:我的项目在构建后无法找到其他项目中的类(来自相同的解决方案),并且将这些其他项目更改为 NET3.5 不会'似乎解决不了问题。
  • @Tremor 这不是托马斯问的。他并不是建议您以管理员身份运行 VS2012 - 他是说您的映射驱动器将不可用如果您以管理员身份运行。

标签: .net visual-studio-2012


【解决方案1】:

根据 MSDN,NET20NET45 之间关于导致 System.IO.FileInfo.Exists 返回 false 的原因没有任何变化。话虽如此,Exists 在以下任何情况下都可以返回 false:

  • 文件不存在。
  • 路径不存在。
  • 正在执行的程序集没有访问该文件的权限。
    • 执行程序集的用户没有权限
    • 程序集在没有权限的用户范围内执行。 (例如,以管理员身份运行)。
  • 路径包含无效字符。
  • 路径为空。
  • 无法访问路径(例如,网络驱动器已断开连接)。

有了这些信息,您应该尝试在不同的环境中运行您的代码。如:

  • 无论是否以管理员身份运行 VS
  • 直接运行可执行文件(在 VS 之外)
  • 使用 LINQPad 等工具运行脚本形式的代码:var FI = new System.IO.FileInfo("X:\MyFolder\MyFile.sim");

您可以采取的另一条路径是调试,这是针对本地计算机上存在的已知文件运行它。例如,测试您桌面上的文件是否存在于两个运行时中。虽然我强烈怀疑这与网络驱动器在空闲时断开连接有关。您也可以尝试绕过映射驱动器并直接进入完整路径(例如 \some-server\MyFolder\MyFile.sim),看看是否会引发异常或其他类型的结果。

【讨论】:

  • 非常感谢您的详细回答。今天,一天后,无需重新启动机器,它就可以工作了。我想不通,我没有做任何可以改变这种情况的事情:目标框架仍然是 NET40 等。但在此之前,我测试了“存在”返回 false 的所有条件(见下一条评论)。跨度>
  • 1 和 2:文件或路径确实存在。 3.1 和 3.2:我可以作为用户访问文件(因为我可以使用资源管理器访问它),并且以管理员身份运行 VB2012 并没有改变结果(FileInfo.Exists 仍然是错误的)。 4:不包含任何无效字符。 5:路径不为空。 6:驱动已连接。我没有做其他测试,现在它正在工作,我将无法对它们进行测试(抱歉,如果其他人有同样的问题并找到这篇文章)。
  • @Tremor 网络驱动器可能会遇到此类间歇性问题。我不能告诉你为什么,但我以前看到过这样不一致的结果。我怀疑这是与缓存连接相关的某种问题。很高兴它对你有用。
  • VS 不以管理员身份运行已经成功了!另一方面,在本地使用 WCF-Services 时,VS 必须在 Adminstaror-Mode 下启动...奇怪的 M$-Stuff 在这里!!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-15
  • 2022-07-04
  • 2023-03-31
相关资源
最近更新 更多