c#的一个bug,File.Exists() 对网络映射盘上的文件,不论存在与否,一律返回false。FileInfo类也有同样的问题。换成本地硬盘上的文件,能正确返回。

解决方案 »

  1.   

    非常感谢您关注微软技术。
    File.Exists()本身没有问题。您可以试一下,在Winform中完成同样的功能不会出任何错误。
    之所以在ASP.NET上对其他机器上的共享文件,不论存在与否,一律返回false,主要是用户权限的问题。当运行ASP.NET程序时,并不是以当前用户权限运行,而是以ASPNET用户权限。处于安全方面考虑,该权限在VS.NET正式版有比较严格的限制。当ASPNET权限无权查看该共享文件,则返回false。有一个workaround:您可以更改该ASP.NET程序的用户权限,在Web.config文件中为该ASP.NET应用程序指定一个特定的用户:
    <identity impersonate="true" userName="accountname" password="password" />
    经过测试,这时应该能够直接检测到其他机器的共享文件是否存在:
    bool a = File.Exists("\\OtherComputer\share\test.txt");
    (检测网络映射盘上的文件仍会有问题)。希望这样一个变通的方案能对您有所帮助。关于ASP.NET程序权限的修改,您可以参考:
    http://support.microsoft.com/default.aspx?scid=kb;en-us;Q306158&SD=MSKB&======================
    - 微软全球技术中心本贴子仅供CSDN的用户作为参考信息使用。其内容不具备任何法律保障。您需要考虑到并承担使用此信息可能带来的风险。具体事项可参见使用条款(http://support.microsoft.com/directory/worldwide/zh-cn/community/terms_chs.asp)。
    为了为您创建更好的讨论环境,请参加我们的用户满意度调查(http://support.microsoft.com/directory/worldwide/zh-cn/community/survey.asp?key=(S,49854782))。
    ======================
      

  2.   

    还是有问题,加<identity impersonate="true" userName="accountname" password="password" />到Web.config,运行时浏览器报
    “指定的登录会话不存在。可能已被终止。 ”,在策略里赋予权限也白瞎。改Machine.config文件里的用户也无效。照网页上的方式改程序也不行。我没招了。谁还有什么主意?
      

  3.   

    改Machine.config就可以解决问题,我用过,很好用。改machine为system,不过这样aspnet的权限很大,安全问题值得注意。
      

  4.   

    奇怪了,听楼上一说,我又重新试了一遍,就是不行。请问楼上aspnet权限要该吗,代码要改嘛?
    Machine.config里这么改对吗?
    <processModel enable="true" timeout="Infinite" idleTimeout="Infinite" shutdownTimeout="0:00:05" requestLimit="Infinite" requestQueueLimit="5000" restartQueueLimit="10" memoryLimit="60" webGarden="false" cpuMask="0xffffffff" userName="SYSTEM" password="AutoGenerate" logLevel="Errors" clientConnectedCheck="0:00:05" comAuthenticationLevel="Connect" comImpersonationLevel="Impersonate" responseRestartDeadlockInterval="00:09:00" responseDeadlockInterval="00:03:00" maxWorkerThreads="25" maxIoThreads="25"/>能不能把你的修改和代码贴出来?
      

  5.   

    奇怪了,我改了,为什么不起作用?Machine.config里改成
    <processModel enable="true" timeout="Infinite" idleTimeout="Infinite" shutdownTimeout="0:00:05" requestLimit="Infinite" requestQueueLimit="5000" restartQueueLimit="10" memoryLimit="60" webGarden="false" cpuMask="0xffffffff" userName="SYSTEM" password="AutoGenerate" logLevel="Errors" clientConnectedCheck="0:00:05" comAuthenticationLevel="Connect" comImpersonationLevel="Impersonate" responseRestartDeadlockInterval="00:09:00" responseDeadlockInterval="00:03:00" maxWorkerThreads="25" maxIoThreads="25"/>
    aspnet的权限还要改嘛?代码用不用修改?策略里还要改嘛?(我统统试过)你怎么设的?能不能把代码和processModel贴出来看看?
      

  6.   

    主要是安全问题,如果你的程序copy在网络路径上,然后直接运行访问你自己本地的文件,会被禁止的。
      

  7.   

    主要是安全问题,如果你的程序copy在网络路径上,然后直接运行访问你自己本地的文件,会被禁止的。