首页 > 解决方案 > 如何用c#创建一个非只读的文件夹?

问题描述

在我的 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();
}

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

标签: c#formswinformsdirectory

解决方案


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

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

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

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

编辑:

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

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

DirectorySecurity security = directory.GetAccessControl();

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

directory.SetAccessControl(security);

推荐阅读