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

使用Renci.SshNet.Sftp跨文件夹复制文件报错:"No such File"

解决Renci.SshNet.Sftp跨文件夹复制文件时的“No such file”错误

跨文件夹复制文件时触发“No such file”错误,核心原因是目标文件的父目录不存在——SftpClient.Create()和OpenWrite()方法都不会自动创建不存在的上级目录,只有当父目录已经存在时才能成功创建目标文件。同一文件夹内复制正常,是因为目标父目录就是当前文件夹,必然存在。

解决步骤

  1. 解析目标文件路径的父目录
  2. 递归创建不存在的父目录(Renci.SshNet的CreateDirectory不支持直接创建多级目录,需要手动递归处理)
  3. 再执行文件复制逻辑

修改后的完整代码

首先添加递归创建远程目录的辅助方法:

Private Sub CreateRemoteDirectory(client As SftpClient, directoryPath As String)
    If Not client.Exists(directoryPath) Then
        ' 获取上级目录路径
        Dim parentDir As String = Path.GetDirectoryName(directoryPath)
        ' 递归创建上级目录,直到根目录
        If Not String.IsNullOrEmpty(parentDir) AndAlso Not client.Exists(parentDir) Then
            CreateRemoteDirectory(client, parentDir)
        End If
        ' 创建当前目录
        client.CreateDirectory(directoryPath)
    End If
End Sub

然后修改原复制方法,添加目录检查与创建逻辑:

Public Sub CopyFile(sourceRemotePath As String, targetRemotePath As String)
    ' 统一路径分隔符为SFTP服务器常用的/
    sourceRemotePath = sourceRemotePath.Replace("\", "/")
    targetRemotePath = targetRemotePath.Replace("\", "/")

    Using client As New SftpClient(Me._Host, Me._Port, Me._Username, Me._Password)
        client.Connect()

        ' 提取目标文件的父目录路径
        Dim targetParentDir As String = Path.GetDirectoryName(targetRemotePath)
        ' 若父目录不为空且不存在,则创建
        If Not String.IsNullOrEmpty(targetParentDir) Then
            CreateRemoteDirectory(client, targetParentDir)
        End If

        ' 执行文件复制
        Using sourceStream As SftpFileStream = client.OpenRead(sourceRemotePath)
            Using destStream As SftpFileStream = client.Create(targetRemotePath)
                sourceStream.CopyTo(destStream)
            End Using
        End Using

        client.Disconnect()
    End Using
End Sub

额外注意事项

  • 确保目标路径使用绝对路径,若用相对路径,需确认SFTP客户端的当前工作目录(可通过client.WorkingDirectory查看)是否正确
  • 检查SFTP账号是否拥有目标目录的创建权限,权限不足也会导致类似错误
  • 路径分隔符统一用/,避免Windows风格的\引发路径解析错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 10:52:37