Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用非只读的c#创建文件夹?_C#_Forms_Winforms_Directory - Fatal编程技术网

如何使用非只读的c#创建文件夹?

如何使用非只读的c#创建文件夹?,c#,forms,winforms,directory,C#,Forms,Winforms,Directory,在我的C#forms应用程序中,我尝试将数据下载到我的SFTP服务器的目录中。数据应该存储在我想在“MyDocuments”中创建的文件夹中。创建文件夹时,我收到一个Renci错误“failure”,因为该文件夹为“只读” 我尝试了很多方法来创建文件夹,但我使用的大多数方法要么是错误,要么是我没有创建文件夹的权限,要么是我得到了一个空文件而不是文件夹。现在我有一个文件夹,但不幸的是它是只读的 String localPath = Environment.GetFolderPath(Environ

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

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

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

我希望文件夹不是只读的,这样我就可以使用我的程序保护其中的数据。有人知道为什么我的代码仍然创建只读的吗?

我相信您必须使用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);

在客户端上使用窗口资源管理器并手动尝试从客户端向网络文件夹添加文本文件。windows凭据可能不允许您写入文件夹。使用Windows资源管理器将验证您是否具有写入文件夹的权限。请检查
Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
是否未返回null或“”。另外,如果该目录已经以只读形式存在,那么您的代码将不会进行任何更改(显然),因此它将保持只读。我总是在启动应用程序之前删除该文件夹,因此我知道该文件夹是以只读方式创建的。您可以尝试显式删除只读,如本文所示:@ThomasN我已经尝试过这一步。即使使用这种方法,它也会创建一个具有只读属性的文件夹如果我使用该代码,我会收到一个“identityNotMappedException”编辑的答案,我也在我的应用程序中运行了一些测试,其中一个使用SFTP将文件从一台服务器传输到另一台服务器