C# 目录。不适用于网络路径
我有一行代码检查目录是否存在,然后获取其中的文件列表C# 目录。不适用于网络路径,c#,asp.net,directory,C#,Asp.net,Directory,我有一行代码检查目录是否存在,然后获取其中的文件列表 System.IO.Directory.Exists(@"\\Server\Folder\"); 当我测试它时(从VisualStudio运行),我可以工作,但是当我部署网站时,它总是返回false 我对另一台服务器(比如Server2)上的另一个文件夹进行了相同的验证,结果很好 然后我认为这是一个访问问题,但共享文件夹和网络可以访问所有人。。。它不起作用还有其他原因吗?当您在Visual Studio中运行代码时,它会以用户的权限运行 在
System.IO.Directory.Exists(@"\\Server\Folder\");
当我测试它时(从VisualStudio运行),我可以工作,但是当我部署网站时,它总是返回false
我对另一台服务器(比如Server2)上的另一个文件夹进行了相同的验证,结果很好
然后我认为这是一个访问问题,但共享文件夹和网络可以访问所有人。。。它不起作用还有其他原因吗?当您在Visual Studio中运行代码时,它会以用户的权限运行 在IIS中运行代码时,它以应用程序池的身份运行,默认情况下,应用程序池是内置用户“网络服务”。这是一个本地用户帐户,在本地计算机之外没有访问权限 网络共享上的权限是第一层,然后检查目录上的NTFS权限
您需要将应用程序池的标识更改为与您的用户具有相同权限的域用户。我可能有点晚了,但我发现
目录
类的此方法存在问题。
相反,我将DirectoryInfo
用于模拟:
new DirectoryInfo(path).Exists
这样,您就避免了整个身份更改问题,而我们的IT部门拒绝了这个问题
我希望这能帮助别人 对于将来的参考,这也适用于:
bool result = false;
try
{
Directory.GetAccessControl(path);
result = true;
}
catch (UnauthorizedAccessException)
{
result = true;
}
catch
{
result = false;
}
我在UNC代码中遇到了如下错误: @“\Server01\c$\Data\SubFolder” 我做了一个明确的分享,去掉了
c$
,使它看起来像这样:
@“\Server01\TheData\子文件夹”
它开始起作用了
我不能100%确定是什么解决了权限问题,但它在进行更改后立即开始工作。IIS运行的帐户是否具有访问权限?它是否无法取消引用
服务器
?它也在我的本地IIS上进行测试,但设置为应用程序用户,因此,我的本地windows用户需要连接到网络。我将我的特定用户设置为官方服务器的IIS,它就工作了。谢谢。我没有一个用户对我需要复制文件的所有源目录和目标目录拥有权限。是否有其他方法连接到驱动器?它也不能通过使用驱动器号来使用映射网络驱动器,所以我想“网络使用”也不会有帮助。非常感谢。头痛了半天,这并不能解决模仿的问题。主要区别在于Directory
是一个静态类,DirectoryInfo
是一个类的实例。