在我的Windows Server 2008上的asp.net应用程序中,我有这样的代码
tempfile = Path.GetTempFileName()
... Write data to tempfile ...
File.Move(tempfile, storageDir + fileName)
这很好用。之后当我尝试从ASP.NET外部访问该文件时,问题就出现了。即使我正在访问的用户对 storageDir 文件夹具有(递归)读取权限,也会拒绝访问。
似乎移动的文件不会从移动到的文件夹继承权限。这是否正确,如果是,是否有一种简单的方法可以解决这个问题?
现在作为直接修复,我已经将我的ASP.NET应用程序中的每个File.Move()实例更改为File.Copy()+ File.Delete(),这似乎可以解决问题。但这感觉就像是一种非常肮脏的做事方式。
答案 0 :(得分:0)
该应用程序可能正在占用该文件。
您可能需要释放资源。很难从你的代码片段中准确地告诉你如何处理文件,但尝试tempfile.Dispose()
之类的内容。
答案 1 :(得分:0)
您描述的行为是设计的:
Moving a file does not recalculate inherited permissions.
我认为您已经描述了解决此问题的最简单方法:“复制并删除”而不是“移动”。