我想在当前用户的桌面文件夹中创建一个文件夹;我一直收到拒绝访问的消息。我在IIS中的配置文件下有完整的写权限。
string activeDir = @"C:\Users\dmm\Desktop\";
string newPath = System.IO.Path.Combine(activeDir, "mySubDir");
System.IO.Directory.CreateDirectory(newPath);
任何帮助将不胜感激。
答案 0 :(得分:6)
尝试使用内置对象获取桌面路径,并让.NET也处理新文件夹的路径构建。您还需要先检查目录是否存在。
string newFolder = "abcd1234";
string path = System.IO.Path.Combine(
Environment.GetFolderPath(Environment.SpecialFolder.Desktop),
newFolder
);
if(!System.IO.Directory.Exists(path)) {
try {
System.IO.Directory.CreateDirectory(path);
} catch (IOException ie) {
Console.WriteLine("IO Error: " + ie.Message);
} catch (Exception e) {
Console.WriteLine("General Error: " + e.Message);
}
}
答案 1 :(得分:2)
默认情况下,在IIS上部署应用程序时,会使用ApplicationPoolIdentity
执行该应用程序。哪个是虚拟用户创建并命名为IIS AppPool\YourPoolName
如果此虚拟用户没有对桌面的写入权限。你得到了那个例外。
您有两种选择。
ApplicationPoolIdentity
用户对桌面目录的写入权限。转到桌面文件夹并添加具有写访问权限的用户IIS AppPool\YourPoolName
:
IIS->应用程序池 - >您的AppPool - >高级设置 - >身分 - >
选择自定义帐户,然后单击设置按钮。然后输入您的Windows用户凭据。
我建议先选择。
答案 2 :(得分:1)
这里有许多需要考虑的问题,首先是您的应用程序是ASP.NET应用程序,而每个当前用户都是不同的。如果您的应用程序 - 只是假设 - 在您的计算机上正常运行,它永远不会在托管环境中运行,因为它们不授予特殊文件夹和用户帐户的写入权限。
也就是说,您需要在物理路径中工作才能创建目录。
var path = "C:\\Users\\afzaa\\Desktop\\";
var folder = Path.Combine(path, "folder");
Directory.CreateDirectory(folder);
正如您所看到的,代码正常工作,在执行过程中根本没有问题。
有几点需要注意:
不要这样做,在您的托管域中在线编写内容。用户拥有不同的文件夹帐户和结构,因此无法使用 - 桌面路径不同。
如果您希望用户下载该文件,只需将文件向下流式传输,然后将其保存到所需位置。
https://forums.asp.net/t/1807775.aspx?Create+e+New+Folder+Access+Denied+ https://answers.microsoft.com/en-us/windows/forum/windows_xp-files/unable-to-create-the-folder-new-folder-access-is/ac318218-a7b2-4ee2-b301-2ad91856050b .NET MVC Access denied when trying to create Directory
答案 3 :(得分:0)
如果从IIS应用程序运行逻辑,则应使用Server.MapPath
:
System.IO.Directory.CreateDirectory(Server.MapPath(newPath));