Directory.Exists不适用于网络路径

时间:2012-04-17 18:22:22

标签: c# asp.net directory

我有一行代码检查目录是否存在,然后获取其中的文件列表。

System.IO.Directory.Exists(@"\\Server\Folder\");

我在测试时工作(从visual studio运行),但是当我部署网站时,它总是返回false。

我对另一个服务器(比如说Server2)的另一个文件夹进行相同的验证,它运行正常。

然后我认为这是一个访问问题,但共享文件夹和网络可以访问所有人...还有其他原因导致它不起作用吗?

4 个答案:

答案 0 :(得分:21)

在Visual Studio中运行代码时,它将以用户的权限运行。

当您在IIS中运行代码时,它以应用程序池的标识运行,默认情况下,该应用程序池是内置用户“网络服务”,这是本地用户帐户,无法访问本地计算机。

网络共享上的权限是第一层,之后检查目录上的NTFS权限。

您需要将应用程序池的标识更改为具有与用户相同权限的域用户。

答案 1 :(得分:3)

我可能有点晚了,但我发现这个Directory类的方法存在问题。 相反,我用DirectoryInfo模仿这种方式:

new DirectoryInfo(path).Exists

通过这种方式,您可以避免我们的IT领域拒绝的整个身份更改问题。

我希望这有助于某人!

答案 2 :(得分:2)

对于将来的参考,这也有效:

bool result = false;
try
{
    Directory.GetAccessControl(path);
    result = true;
}
catch (UnauthorizedAccessException)
{
    result = true;
}
catch
{
    result = false;
}

答案 3 :(得分:0)

我在使用如下所示的UNC代码时遇到此错误:

@“ \ Server01 \ c $ \ Data \ SubFolder”

我做出了明确的分享,放弃了c$,使其看起来像这样:

@“ \ Server01 \ TheData \ SubFolder”

它开始工作。

我不能100%确定是什么解决了权限问题,但是更改后它立即开始起作用。