在桌面上创建文件夹

时间:2016-12-19 11:43:20

标签: c# asp.net file-io

我想在当前用户的桌面文件夹中创建一个文件夹;我一直收到拒绝访问的消息。我在IIS中的配置文件下有完整的写权限。

string activeDir = @"C:\Users\dmm\Desktop\";
string newPath = System.IO.Path.Combine(activeDir, "mySubDir");
System.IO.Directory.CreateDirectory(newPath);

任何帮助将不胜感激。

4 个答案:

答案 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如果此虚拟用户没有对桌面的写入权限。你得到了那个例外。

您有两种选择。

  1. 授予ApplicationPoolIdentity用户对桌面目录的写入权限。
  2. 转到桌面文件夹并添加具有写访问权限的用户IIS AppPool\YourPoolName

    1. 将池标识更改为对目录具有写入权限的用户。 去
    2.   

      IIS->应用程序池 - >您的AppPool - >高级设置 - >身分    - >

      选择自定义帐户,然后单击设置按钮。然后输入您的Windows用户凭据。

      我建议先选择。

答案 2 :(得分:1)

这里有许多需要考虑的问题,首先是您的应用程序是ASP.NET应用程序,而每个当前用户都是不同的。如果您的应用程序 - 只是假设 - 在您的计算机上正常运行,它永远不会在托管环境中运行,因为它们不授予特殊文件夹和用户帐户的写入权限

也就是说,您需要在物理路径中工作才能创建目录。

var path = "C:\\Users\\afzaa\\Desktop\\";
var folder = Path.Combine(path, "folder");
Directory.CreateDirectory(folder);

上述代码的结果是, enter image description here

正如您所看到的,代码正常工作,在执行过程中根本没有问题。

有几点需要注意:

  1. 您的应用程序具有读/写权限。检查IIS。
  2. 您的代码实际上可以查找您尝试访问的路径。这也适用于Desktop内的任何文件夹,子文件夹可能具有特殊权限。
  3. 不要这样做,在您的托管域中在线编写内容。用户拥有不同的文件夹帐户和结构,因此无法使用 - 桌面路径不同。

    如果您希望用户下载该文件,只需将文件向下流式传输,然后将其保存到所需位置。

    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));