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

问题描述 投票:0回答:2

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

我正在使用 WinSCP .NET 程序集,并编写 C#。

我注意到您只能在方法中设置权限:

Session.PutFiles
而不是在方法中:
Session.CreateDirectory

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

如何访问该文件?

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

c# directory file-permissions winscp winscp-net
2个回答
4
投票

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

目前无法在创建目录时直接设置权限或随后使用 WinSCP .NET 程序集修改权限。
请参阅https://winscp.net/tracker/1075

您可以按如下方式破解它:

string directoryName = "mydir";
string directoryPath = "/home/username/" + directoryName;
string tempPath = Path.Combine(Path.GetTempPath(), directoryName);

Directory.CreateDirectory(tempPath);

try
{
    TransferOptions options = new TransferOptions();
    options.FilePermissions = new FilePermissions { Octal = "755" };
    session.PutFiles(tempPath, directoryPath, false, options).Check();
}
finally
{
    Directory.Delete(tempPath);
}

您甚至可以不创建空的临时目录。只需选择任何目录,例如并使用文件掩码仅包含该目录,以防止上传该目录及其子目录中的文件。还可以在目标路径中使用所需远程目录的显式名称,将上传的目录“重命名”为您想要的名称。


0
投票

今天在 Powershell 中做了类似的事情(不知道 C#):

$Session.CreateDirectory($RemotePath)
$Session.ExecuteCommand(('chmod 775 {0}' -f $RemotePath))
© www.soinside.com 2019 - 2024. All rights reserved.