欢迎来访博主私人 薄·客.

前言

bool isExists = File.Exists(FileFullPathName);

没错,再熟悉不过的一行代码。大部分情况下,它的返回是正确的。但是在开发过程中,我确实遇到了比较棘手的情况:

在Debug模式下,它是没有问题的;当我发布到IIS后,传入FileFullPathName远程共享路径时,且确保路径格式没有问题的前提下,它将确实存在的文件判断为不存在。(这里强调一下:通过文件管理器直接访问这个远程文件路径是OK的)一开始,就觉得很神奇,很无语😶(ˉ▽ˉ;)...

像大家一样,我转向百度获取解决办法,大概分为这几种:

1、如果路径是Copy的,可能在Copy的过程中包含了不可视的Unicode字符,建议手动一个一个路径敲上去;
2、尝试使用Directory.Exists(path)【注意:Directory.Exists是用来判断文件夹是否存在的;File.Exists是用来判断文件是否存在的】
3、权限问题【算是说到点子上了,但是就是找不到具体的解决办法】

所以,该篇文章,将主要针对上述第三点展开具体解决措施的描述:

下文将从两个方法展开讲解,方式一和方式二取其一即可

方案一

归根到底问题出在IIS WebService,前面我们说了,Debug模式下它是能正常访问的,所以方案一中我们对IIS对应的WebService服务进行权限设置:

打开网站对应的程序池的高级设置

打开网站对应的程序池的高级设置

按下图步骤设置凭据

按图步骤设置凭据

重启网站

重启网站

若方案一未能解决,请继续尝试方案二👇

方案二

如果方案一还是无效,那就需要去操作Windows凭据

从控制面板进入到 凭据管理器

凭据管理器

为windows凭据添加凭据

点击Windows凭据,并点击添加Windows凭据

添加Windows凭据

键入远程路径的地址、账户名和访问密码

键入信息

再次调用WebService即可成功

总结

所以我们在保证路径格式正确的前提下,只能考虑权限的问题。 我们通常在文件管理器键入路径访问方式下的账户不同于IIS调用方式的账户

以下官方文档中就给到了很明确的解释:
官方解释

2023-08-31T10:42:14.png

本文至此结束
最后修改:2023 年 08 月 31 日
如果觉得我的文章对你有用,请随意赞赏