使用Renci Ssh.Net下载文件后抛出“文件路径不存在或无效”错误
问题分析与解决方案
核心错误:远程路径格式错误
你构造的FileSourceName错误地将FTP服务器地址与远程路径拼接在一起,生成了类似ftp.example.com/data/spot_performance.csv的字符串。但SftpClient.DownloadFile方法需要的是远程服务器上的文件相对路径或绝对路径,不需要包含服务器地址——因为你已经通过SftpClient建立了服务器连接,直接传入远程文件的路径即可。修正后的代码
using (var sftp = new SftpClient(FTPServer, 22, FTPUserID, FTPPwd)) { sftp.Connect(); // 仅保留远程服务器上的文件路径,无需拼接服务器地址 FileSourceName = FTPPath + "/spot_performance.csv"; FileProcessName = FileProcessPath + @"\spot_performance.csv"; using (var fileStream = System.IO.File.OpenWrite(@"C:\Data\ETL\Innogames - SPOT Performance\spot_performance.csv")) { sftp.DownloadFile(FileSourceName, fileStream); } }额外检查要点
- 确认
FTPPath是远程服务器上的有效路径:如果文件在服务器根目录,直接写"/spot_performance.csv";如果在子目录,比如"/data/spot_performance.csv"。 - 确保SFTP账号对该远程路径拥有读取权限,权限不足也可能触发类似“路径无效”的错误提示。
- 本地目标目录
@"C:\Data\ETL\Innogames - SPOT Performance"需提前存在,虽然File.OpenWrite会自动创建文件,但目录不存在时可能引发隐性异常,建议提前用Directory.CreateDirectory确保目录存在。
- 确认
内容的提问来源于stack exchange,提问作者John W.
相关产品推荐
相关产品推荐

