dsp*_*ank 2 c# ftp winscp winscp-net
enter code here我将文件放在远程FTP服务器上时遇到问题。
我正在使用带有C#的WinSCP .NET程序集。
我能够连接到FTP服务器,但是当我尝试使用session.PutFile(local,remote)它时,它会跳到transferResult.Check()一个错误:
{WinSCP.SessionRemoteException:传输文件'C:\ testfile.txt时出错。---> WinSCP.SessionRemoteException:将文件复制到远程端失败。无法更改为“ / ftp:/”;找不到“ ftp:”。
请在下面找到我的代码。
private static void transferWinSCP()
{
string userName = myUsername;
string password = myPassword;
string path = ftp://hostname.com/f/fofd671e-0eee-4c23-932d-4ba32c938c8f;
string logPath = ConfigurationManager.AppSettings["LogPath"];**
try
{
SessionOptions sessionOptions = new SessionOptions
{
Protocol = Protocol.Ftp,
HostName = "hostname.com",
PortNumber = 990,
UserName = userName,
Password = password,
FtpSecure = FtpSecure.Implicit,
FtpMode = FtpMode.Passive,
TlsHostCertificateFingerprint = "xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx"
};
using (Session session = new Session())
{
session.SessionLogPath = logPath;
//connect
session.Open(sessionOptions);
//upload
TransferOptions transferOptions = new TransferOptions {TransferMode = TransferMode.Binary};
TransferOperationResult transferResult = session.PutFiles(@"C:\testfile.txt",url, false,
transferOptions);
transferResult.Check(); //ftp error
foreach (TransferEventArgs transfer in transferResult.Transfers)
{
Console.Write("upload of {0} succeeded", transfer.FileName);
}
}
}
catch (Exception ex)
{
Console.Write("error {0}", ex);
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的日志文件:
private static void transferWinSCP()
{
string userName = myUsername;
string password = myPassword;
string path = ftp://hostname.com/f/fofd671e-0eee-4c23-932d-4ba32c938c8f;
string logPath = ConfigurationManager.AppSettings["LogPath"];**
try
{
SessionOptions sessionOptions = new SessionOptions
{
Protocol = Protocol.Ftp,
HostName = "hostname.com",
PortNumber = 990,
UserName = userName,
Password = password,
FtpSecure = FtpSecure.Implicit,
FtpMode = FtpMode.Passive,
TlsHostCertificateFingerprint = "xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx"
};
using (Session session = new Session())
{
session.SessionLogPath = logPath;
//connect
session.Open(sessionOptions);
//upload
TransferOptions transferOptions = new TransferOptions {TransferMode = TransferMode.Binary};
TransferOperationResult transferResult = session.PutFiles(@"C:\testfile.txt",url, false,
transferOptions);
transferResult.Check(); //ftp error
foreach (TransferEventArgs transfer in transferResult.Transfers)
{
Console.Write("upload of {0} succeeded", transfer.FileName);
}
}
}
catch (Exception ex)
{
Console.Write("error {0}", ex);
}
}
Run Code Online (Sandbox Code Playgroud)
该方法的remotePath参数为:Session.PutFiles
上传文件的完整路径。上传多个文件时,路径中的文件名应替换为操作掩码或省略(路径以slash结尾)。
您传递的不是路径,而是URL。做什么的?您已经在中指定了主机名和协议SessionOptions。
仅使用路径。
同样,由于路径是目标文件夹名称(而不是目标文件名),因此路径必须以斜杠(或文件名)结尾。
string path = "/f/fofd671e-0eee-4c23-932d-4ba32c938c8f/";
...
session.PutFiles(@"C:\testfile.txt", path, false, transferOptions);
Run Code Online (Sandbox Code Playgroud)
请参阅官方示例,以使用WinSCP .NET程序集上传文件。