1

如果在该路径中,则找不到文件和文件。

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 服务项目。

Account LocalSystem我必须更改配置中的服务窗口吗?

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

4

1 回答 1

4

Account LocalSystem我必须更改配置中的服务窗口吗?

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

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

此外,首先使用它几乎总是不好的做法File.Exists()。相反,只需尝试复制文件并在失败时处理异常。无论如何,您都需要这样做,因为文件复制失败的原因有很多,而与现有文件无关。这也更快,因为尽管异常处理可能很慢,但它通常仍然比File.Exists()检查调用的额外磁盘/网络 I/O 操作集快得多。

于 2018-09-05T19:53:43.840 回答