c#的一个bug,File.Exists() 对网络映射盘上的文件一律返回false

limj 2002-07-18 06:27:11
c#的一个bug,File.Exists() 对网络映射盘上的文件,不论存在与否,一律返回false。FileInfo类也有同样的问题。换成本地硬盘上的文件,能正确返回。
...全文
925 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
storms1314 2010-05-27
  • 打赏
  • 举报
回复
我也遇到同样的问题,我正在尝试着把"~/"模样的绝对路径直接换算成物理路径。
juqiang 2002-07-25
  • 打赏
  • 举报
回复
主要是安全问题,如果你的程序copy在网络路径上,然后直接运行访问你自己本地的文件,会被禁止的。
juqiang 2002-07-25
  • 打赏
  • 举报
回复
主要是安全问题,如果你的程序copy在网络路径上,然后直接运行访问你自己本地的文件,会被禁止的。
limj 2002-07-25
  • 打赏
  • 举报
回复
楼上能不能举个例子?
limj 2002-07-25
  • 打赏
  • 举报
回复
楼上能不能举个例子?
limj 2002-07-22
  • 打赏
  • 举报
回复
奇怪了,我改了,为什么不起作用?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贴出来看看?
limj 2002-07-22
  • 打赏
  • 举报
回复
奇怪了
limj 2002-07-22
  • 打赏
  • 举报
回复
奇怪了,听楼上一说,我又重新试了一遍,就是不行。请问楼上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"/>

能不能把你的修改和代码贴出来?
freesoul_ms 2002-07-19
  • 打赏
  • 举报
回复
非常感谢您关注微软技术。


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))。
======================
comy 2002-07-19
  • 打赏
  • 举报
回复
改Machine.config就可以解决问题,我用过,很好用。改machine为system,不过这样aspnet的权限很大,安全问题值得注意。
limj 2002-07-19
  • 打赏
  • 举报
回复
换那个api?举个例子好吗?
limj 2002-07-19
  • 打赏
  • 举报
回复
还是有问题,加<identity impersonate="true" userName="accountname" password="password" />到Web.config,运行时浏览器报
“指定的登录会话不存在。可能已被终止。 ”,在策略里赋予权限也白瞎。改Machine.config文件里的用户也无效。照网页上的方式改程序也不行。我没招了。谁还有什么主意?
lbx1979 2002-07-18
  • 打赏
  • 举报
回复
换用api试试吧
limj 2002-07-18
  • 打赏
  • 举报
回复
感觉真讨厌,害我乱查了一天,也没解决,谁有好办法?

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧