【问题标题】:How to create a folder with c# which is NOT read only?如何用c#创建一个非只读的文件夹?
【发布时间】:2019-04-30 10:41:12
【问题描述】:

在我的 C# 表单应用程序中,我尝试将数据下载到我的 SFTP 服务器的目录中。数据应存储在我要在“MyDocuments”中创建的文件夹中。创建文件夹时,我收到 Renci 错误“失败”,因为该文件夹是“只读”。

我尝试了很多方法来创建文件夹,但在我使用的大多数方法中,要么出现错误,即我没有创建文件夹的权限,要么得到了一个空文件而不是文件夹。现在我有一个文件夹,但不幸的是它是只读的。

String localPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "\\MyNewFolder\\";

if (Directory.Exists(localPath))
{
    Console.WriteLine("Folder already exists");
}

if (!Directory.Exists(localPath))
{
    Directory.CreateDirectory(localPath);

    DirectoryInfo directory = new DirectoryInfo(localPath);
    DirectorySecurity security = directory.GetAccessControl();
}

我希望该文件夹不是只读的,以便我可以使用我的程序保护其中的数据。任何人都知道为什么我的代码仍然创建一个只读的?

【问题讨论】:

  • 在客户端上使用窗口资源管理器并手动尝试从客户端将文本文件添加到网络文件夹。 Windows 凭据可能不允许您写入该文件夹。使用 Windows 资源管理器将验证您是否有权写入该文件夹。
  • 检查Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) 没有返回空值或“”。此外,如果该目录已经以只读方式存在,您的代码将不会进行任何更改(显然),因此它将保持只读状态。
  • 我总是在启动我的应用程序之前删除该文件夹,所以我知道该文件夹始终是只读的..
  • 您可以尝试像在这篇文章中那样明确删除只读:stackoverflow.com/a/2316534/4824531
  • @ThomasN 我已经试过这个了。即使使用该方法,它也会创建一个具有只读属性的文件夹

标签: c# forms winforms directory


【解决方案1】:

我相信您必须使用 DirectorySecurity 对象设置以下内容:

        DirectorySecurity securityRules = new DirectorySecurity();
        securityRules.AddAccessRule(new FileSystemAccessRule(@"Domain\Account", FileSystemRights.FullControl, AccessControlType.Allow));

然后您可以使用以下命令创建目录:

DirectoryInfo di = Directory.CreateDirectory(@"directoryToCreatePath", securityRules);

编辑:

使用 Directory.CreateDirectory() 创建目录后,您可以将以下内容应用于该文件夹。这将允许您指定的用户拥有文件夹的完全控制权。您可以通过“属性”>“安全”检查该用户的权限

DirectoryInfo directory = new DirectoryInfo("C:\\CreatedFolder");

DirectorySecurity security = directory.GetAccessControl();

security.AddAccessRule(new FileSystemAccessRule(@"USERNAME",
                                FileSystemRights.FullControl,
                                AccessControlType.Allow));

directory.SetAccessControl(security);

【讨论】:

  • 如果我使用该代码,我会收到“identityNotMappedException”
  • 编辑了我的答案,我也在我的应用程序中运行了一些测试,其中一个使用 SFTP 将文件从一台服务器传输到另一台服务器
猜你喜欢
  • 1970-01-01
  • 2016-01-06
  • 1970-01-01
  • 1970-01-01
  • 2018-07-16
  • 1970-01-01
  • 2012-07-19
  • 2018-09-22
  • 1970-01-01
相关资源
最近更新 更多