File.Exists()始终在IIS上返回false

时间:2013-05-24 08:34:09

标签: c# asp.net file iis file-permissions

我使用File.Exists()检查的文件路径位于映射驱动器(Z:\hello.txt)上。代码在调试环境中运行良好,但在IIS中,它总是返回false

var fullFileName = string.Format("{0}\\{1}", ConfigurationManager.AppSettings["FileName"], fileName);

if (System.IO.File.Exists(fullFileName))

为什么会这样,我该如何解决这个问题?

我已授予每个人在该映射驱动器中的完全读/写权限

编辑:

我尝试通过\\192.168.1.12\Examples\Files\2.xml删除文件,但得到的结果相同。它不会检测IIS上的文件,但在调试

时工作正常

4 个答案:

答案 0 :(得分:7)

我认为你的申请没有“Z:”的许可 是“Z:”网络磁盘?

答案 1 :(得分:2)

我在使用网络映射驱动器时遇到类似问题,当运行调试代码应用程序运行正常并且运行发行版应用程序时找不到该文件。

如果文件存储在部署应用程序的同一服务器上,我们通过存储映射驱动器的本地驱动器目录位置找到了解决方案,例如Z:\files\可能是E:\folder\folder1\

如果应用程序部署在单独的服务器上,我们发现使用完整的网络名称可以使用例如\\server1\folder\

我希望这证明对你有帮助。

答案 2 :(得分:2)

您的Web应用程序在某个安全上下文中运行,您需要找出它的上下文。如果是普通用户,请以用户(使用runas工具)打开命令提示符,使用命令提示符映射所需的驱动器(确保使用/persistent:yes标志)

或者为什么你不能只使用UNC路径(\\serverName\shareName)并避免所有这些废话?

编辑:2013-05-27 要解决此问题,请根据所需的任何应用程序池创建新的应用程序池。然后设置此池运行的标识,如附带的屏幕截图所示。

Screenshot showing setting of IIS creds

确保此用户对文件共享具有正确的权限,然后重新进行测试

答案 3 :(得分:0)

您可以使用Path.DirectorySeparatorChar