簡體   English   中英

使用 WinSCP .NET 程序集更改根 SFTP 目錄

[英]Change root SFTP directory using the WinSCP .NET assembly

我正在為一個客戶工作,該客戶只允許我訪問兩個特定文件夾及其子文件夾。 第一個曾經是我們以前的工作空間,現在我們將切換到第二個。

當我使用 WinSCP GUI 連接到 SFTP 時,它會將我連接到舊文件夾。 但是,我可以通過單擊設置並在遠程路徑字段中添加“新”路徑來更改它。 然后,當我連接時,session 將自動將我帶到新的默認文件夾/工作區。

我的問題是如何使用 .NET 和相應的 winscpnet 庫來做到這一點?

問題是 session 的根目錄與遠程路徑不同。

例子:

Session 目錄為/C/Document/

遠程路徑是/C/Inetpub/ftproot/username/

當我在終端上使用以下命令時:

winscp.com> open sftp://someone:password;fingerprint=something@ipaddress/C/Inetpub/ftproot/username

winscp.com> put some.txt /in

winscp.com> exit

它工作正常,因為我們可以看到,我的 session 目錄是/C/Inetpub/ftproot/username/

有沒有辦法在 C# 中設置 session 根路徑?

已解決:你是對的,它是一個虛擬路徑,所以 /c/Inetpub 而不是 c/Inetpub

WinSCP .NET 程序集不使用工作目錄的概念。 它總是使用絕對路徑。

因此,如果您將 GUI 會話配置為從/new/path開始,請將其用作 WinSCP .NET 程序集中的絕對路徑。

session.PutFiles(@"c:\local\path\*", "/new/path/", false, transferOptions);

現代的做事方式是使用 Renci.SshNet。 完成后不要忘記使用常規斜杠並退出 session。

您可以使用以下命令創建 Session:

    var connectionInfo = new Renci.SshNet.ConnectionInfo(host, username, new PasswordAuthenticationMethod(username, password));

    using (var sftp = new SftpClient(connectionInfo))
    {
        sftp.Connect();
        sftp.ChangeDirectory("..");
        sftp.ChangeDirectory("C:\Inetpub\ftproot\username\");
     }
     sftp.Disconnect();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM