C# WinSCP.NET程序集-创建目录后如何设置文件夹权限?

C# WinSCP.NET程序集-创建目录后如何设置文件夹权限?,c#,directory,file-permissions,winscp,winscp-net,C#,Directory,File Permissions,Winscp,Winscp Net,我正在构建一个网站,我希望在用户注册时,在SFTP服务器上创建一个目录,并在该目录中放入一个新文件 我正在使用WinSCP.NET汇编,并编写C# 我注意到您只能在方法中设置权限:Session.PutFiles 而不是在方法中:Session.CreateDirectory 因此,在我创建目录并将文件放入其中后,我无法访问该文件,因为我没有权限-我正在使用完整的URL访问该文件 如何访问该文件 附言。 手动更改目录权限时,我可以访问该文件。请注意,这回答了您在创建目录时如何设置权限的问题。但问

我正在构建一个网站,我希望在用户注册时,在SFTP服务器上创建一个目录,并在该目录中放入一个新文件

我正在使用WinSCP.NET汇编,并编写C#

我注意到您只能在方法中设置权限:
Session.PutFiles
而不是在方法中:
Session.CreateDirectory

因此,在我创建目录并将文件放入其中后,我无法访问该文件,因为我没有权限-我正在使用完整的URL访问该文件

如何访问该文件

附言。 手动更改目录权限时,我可以访问该文件。

请注意,这回答了您在创建目录时如何设置权限的问题。但问题的根本原因是服务器设置的默认权限错误。服务器不应使用默认权限,这样您就无法访问自己刚刚创建的目录/文件

当前无法在创建目录时直接设置权限,也无法在以后使用WinSCP.NET程序集修改权限。

您可以按如下方式对其进行破解:

  • 创建一个本地空临时目录
  • 使用上载,在中设置所需的权限
string directoryName=“mydir”;
字符串directoryPath=“/home/username/”+directoryName;
字符串tempPath=Path.Combine(Path.GetTempPath(),directoryName);
CreateDirectory(tempPath);
尝试
{
TransferOptions=新的TransferOptions();
options.FilePermissions=newfilepermissions{Octal=“755”};
session.PutFiles(tempPath、directoryPath、false、options).Check();
}
最后
{
删除目录(tempPath);
}

您甚至可以不创建空的临时目录。只需选择任何目录,例如帐户配置文件文件夹的目录,并使用文件掩码仅包括这一个目录,防止上载目录和子目录中的文件。还可以在目标路径中使用所需远程目录的显式名称,将上载的目录“重命名”为所需的名称。

此处跟踪了提到的错误:我无法对嵌套目录执行此操作--似乎我可能需要对路径中的每个子代重复此操作?此外,per应该
directoryName
以斜杠结尾吗?@drzaus No。在这种情况下,文件名不会被省略。这是
目录名
。实际上,它是多余的,您可以使用
directoryPath=“/home/username/”
(注意斜杠)来实现相同的效果。这只是一个如何实现上一段描述的提示。