【问题标题】:File.Exists not working on network driveFile.Exists 在网络驱动器上不起作用
【发布时间】:2016-05-28 06:02:49
【问题描述】:

我的控制台应用程序检查网络驱动器上是否存在文件,并在文件不存在时记录一条消息。今天我将我的应用程序部署到了 QA 机器上,并且 File.Exists() 一直为确实存在的文件返回 false。我正在通过 Windows 任务调度程序运行该应用程序。当我从命令行运行它时,它似乎工作正常。但无论哪种方式,我现在都不相信它。有没有人看到这种行为或有任何见解?:

Using System.IO;

private static void Main()
{
    var fileName = @"x:\folder\file1.txt"; //be a network share
    If (!File.Exists(fileName) 
    {
        LogMessage("File is not on disk.");
    }
    else
    {
        LogMessage("File is on disk.");
    }
}

【问题讨论】:

  • 驱动器号映射是每个用户的设置。因此,标准故障模式是使用错误的用户帐户运行计划任务。
  • 我在我的帐户下运行了它,该帐户确实映射了该驱动器,但它仍然无法正常工作。你能解释一下“标准故障模式”以及为什么我必须使用 unc 路径(它解决了问题)。

标签: c# file-io scheduled-tasks console-application


【解决方案1】:

我怀疑从任务计划程序运行时未映射驱动器。尝试 UNC 路径

var fileName = @"\\server\share\folder\file1.txt";

【讨论】:

  • 小心——我已经放弃使用带有 UNC 路径的 File.Exists——它在确实存在的文件上永远返回 false。
  • 我想快速验证上面的答案是否正确,所以我创建了一个使用两种方式的测试应用程序,在调度程序下运行它......并且在我使用两种方式的文件上都返回 true .我完全糊涂了。
  • 谢谢你,多索马诺。我将 unc 路径添加到我的真实应用程序中,它似乎工作正常。据我所知,它与任务调度程序无关。但是有人可以解释为什么其他方式不起作用吗?为什么 File.Exist 需要 UNC 路径才能准确?我只是对底层细节很好奇。
  • @inspectorGadget 以我的经验,这是因为从任务计划程序运行时驱动器映射不存在,无论是我自己的帐户还是其他用户的帐户,除非您手动运行登录脚本来映射它们.
  • 谢谢。如果我让这个应用程序成为在特定帐户下运行的 Windows 服务,你认为它会工作吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-31
  • 1970-01-01
  • 2018-08-27
  • 2022-10-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多