You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#使用SSH.NET连接Linux SFTP时远程路径配置疑问

问题解答

正确的远程路径设置

Linux服务器上的volume1/TestFile需要使用绝对路径,也就是在路径前加上根目录的斜杠,所以正确的NasFolderPath应该是:

string NasFolderPath = "/volume1/TestFile";

原因是SFTP连接默认会进入当前用户的主目录(比如/home/test),如果直接写volume1/TestFile,程序会去/home/test/volume1/TestFile查找,而这个路径不存在,所以必须用绝对路径指定根目录下的目标文件夹。

代码中的其他问题

  • 冗余的连接创建:你同时初始化了SshClient和SftpClient,其实可以直接用SftpClient的构造函数建立连接,无需先创建SshClient,既简化代码又节省资源:
    using (var sftp = new SftpClient(hostname, 22, username, password))
    {
        sftp.Connect();
        // 后续SFTP操作
        sftp.Disconnect();
    }
    
  • 日志描述错误:循环中if (!file.IsDirectory)的日志是"HaveDirectory",这和逻辑矛盾(当前判断的是不是目录,也就是找到文件),应该修改为符合逻辑的描述,比如"Found file: " + file.Name。
  • 未检查本地目录是否存在:如果localFilePath对应的C:\test\目录不存在,File.Create会抛出异常,建议在创建文件流前先确保目录存在:
    if (!Directory.Exists(localFilePath))
    {
        Directory.CreateDirectory(localFilePath);
    }
    
  • 无效的日志输出:LogWriter.LogWrite("ConnectFolder" + files);直接拼接files对象会输出类型名称而非有效信息,建议修改为:
    LogWriter.LogWrite($"Connected to folder, found {files.Count()} items");
    
  • 异常信息不够详细:当前只打印了异常的Message,建议添加StackTrace方便排查深层问题:
    LogWriter.LogWrite($"An error occurred: {ex.Message}\nStack Trace: {ex.StackTrace}");
    
  • 资源释放优化:可以用using语句包裹SftpClient,无需手动调用Disconnect(),using会自动释放资源,更安全可靠。

内容的提问来源于stack exchange,提问作者pluto_99

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 13:12:24