我需要在.Net MVC3应用程序中创建一个用于存储文件的文件夹,但我认为这个问题在所有ASP.Net平台上都很常见。
问题是我可以创建文件夹,但无法写入文件,因为发生了System.UnauthorizedAccessException
。
我还为当前运行Web应用程序的用户尝试了额外的权限,但没有任何变化。
到目前为止,这是我的代码:
if (!System.IO.Directory.Exists(fullPath))
{
System.IO.Directory.CreateDirectory(fullPath);
var user = System.Security.Principal.WindowsIdentity.GetCurrent().User;
var userName = user.Translate(typeof(System.Security.Principal.NTAccount));
var dirInfo = new System.IO.DirectoryInfo(fullPath);
var sec = dirInfo.GetAccessControl();
sec.AddAccessRule(new System.Security.AccessControl.FileSystemAccessRule(userName,
System.Security.AccessControl.FileSystemRights.Modify,
System.Security.AccessControl.AccessControlType.Allow)
);
dirInfo.SetAccessControl(sec);
System.IO.Directory.CreateDirectory(fullPath);
}
string fullPathFileName = System.IO.Path.Combine(fullPath, fileName);
System.IO.File.WriteAllBytes(fullPath, viaggio.Depliant.RawFile);
太糟糕了,最后一行代码总是抛出System.UnauthorizedAccessException
。
我不是在我的应用程序中模仿用户,一切都在预定义的用户下运行。
如何创建文件夹并确保应用程序也可以在其中创建文件?
编辑:
我还尝试将文件保存在App_Data特殊文件夹中,但我仍然遇到System.UnauthorizedAccessException
错误。有人可以告诉我为什么会这样?
答案 0 :(得分:1)
当问题是愚蠢时,我讨厌回答我自己的问题......
我只是想在没有正确文件名的情况下保存文件:您可以看到我使用fullPath
变量来创建文件夹和保存文件,而不是使用正确创建的fullPathFileName
。
责备我!
答案 1 :(得分:0)
使用App_Data文件夹,引自http://msdn.microsoft.com/en-us/library/06t2w7da%28v=vs.80%29.aspx:
为了提高ASP.NET应用程序使用的数据的安全性,为ASP.NET应用程序添加了一个名为App_Data的新子文件夹。存储在App_Data文件夹中的文件不会返回以响应直接HTTP请求,这使得App_Data文件夹成为应用程序存储的数据的推荐位置,包括.mdf(SQL Server Express Edition),. mdb(Microsoft Access)或XML文件。请注意,使用App_Data文件夹存储应用程序数据时,应用程序的标识对App_Data文件夹具有读写权限。