【问题标题】:file Exists c# visual studio 2017文件存在 c# Visual Studio 2017
【发布时间】:2019-02-11 00:21:45
【问题描述】:

找不到文件和文件如果在那个路径中。

FileInfo file = new FileInfo(@"\\10.125.16.22\Facturas Electronicas\Factura EMP000098.pdf");
if (file.Exists)
{
    EventLog.WriteEntry("encontro los adjuntos de la factura " + nrodocumento);
    File.Copy(ruta, @"C:\Factura\" + file.Name + ".pdf", true);
    cantidad++;
}
else
{
    EventLog.WriteEntry("no existe el adjunto " + ruta);
}

当它到达if (file.Exists) 时,结果是False。我使用的项目类型是 Visual Studio Service Project。

配置中的服务窗口我有Account LocalSystem我一定要改吗?

如果不是“本地系统”,我应该处理哪个?

【问题讨论】:

标签: c# file local-system-account


【解决方案1】:

配置中的服务窗口我有Account LocalSystem我一定要改吗?

是的,你必须改变它。 LocalSystem 帐户对10.125.16.22 的计算机没有任何权限。 即使是同一台计算机也是如此! UNC 路径将强制进行网络访问,LocalSystem 不会通过网络提供任何凭据。因此File.Exists()总是 返回false,无论文件的实际状态如何。这在the Remarks section of the documentation 的末尾进行了介绍。

如果在尝试确定指定文件是否存在时发生任何错误,Exists 方法将返回 false。这可能发生在引发异常的情况下,例如传递包含无效字符或过多字符的文件名、磁盘故障或丢失,或者调用者没有读取文件的权限。

另外,它是almost always poor practice to use File.Exists() in the first place。相反,只需尝试复制文件并在失败时处理异常。无论如何,您都需要这样做,因为文件复制失败的原因有很多,而与现有文件无关。这也更快,因为尽管异常处理可能很慢,但它通常仍然比File.Exists() 检查调用的额外磁盘/网络 I/O 操作集快得多。

【讨论】:

  • 作为一个经验法则,我尽量不回答重复的问题,同样为了答案的质量。
  • 如果它是一个非常新的用户,我会继续回答。这家伙已经9个月了,但这只是他的第三个问题。此外,虽然这可能是通用 File.Exists() 问题或网络访问问题的重复,但您可以证明将两者放在一起是独一无二的,或者很少有答案。最后,我倾向于对语言障碍给予一定的评价,因为这会使搜索重复项或根据他的具体情况调整通用重复项变得更加困难。
  • 如果不是“本地系统”,我应该处理哪个?
  • 您需要目标系统上的实际用户。这在域环境中最容易实现,因为必须在两个系统上都接受凭据。
  • Rufus L 对该问题的评论中的链接也将对您有用。
猜你喜欢
  • 1970-01-01
  • 2018-06-23
  • 2020-06-14
  • 2017-07-31
  • 2017-05-28
  • 1970-01-01
  • 1970-01-01
  • 2017-09-03
  • 2018-03-18
相关资源
最近更新 更多