我正在使用SSH.NET库并编写了一个简单的ftp文件到服务器的方法,如下所示:
using (var client = new Renci.SshNet.SftpClient(host, port, username, password))
{
client.Connect();
Console.WriteLine("Connected to {0}", host);
using (var fileStream = new FileStream(uploadfile, FileMode.Open))
{
client.BufferSize = 4 * 1024; // bypass Payload error large files
client.UploadFile(fileStream, Path.GetFileName(uploadfile));
}
}
如何检索从服务器返回的状态?我需要知道文件是否成功传输。
TRY ... CATCH可以从服务器恢复状态吗?
谢谢,
答案 0 :(得分:1)
尝试用此替换您的UploadFile专线。这为您正在调用的函数提供回调。回调位于括号中,o为ulong。可能写入的百分比或字节数。
client.UploadFile(fileStream, Path.GetFileName(uploadfile), (o) =>
{
Console.WriteLine(o);
});
修改强>
以上相当于:
//I might be called multiple times during the upload process.
public void OnStatusUpdate(ulong bytesWritten)
{
Console.WriteLine(bytesWritten);
}
...
//later
client.UploadFile(fileStream, Path.GetFileName(uploadfile), OnStatusUpdate);
他们正在调用你的函数,如果没有传递给它的函数,就不能调用你的函数。
答案 1 :(得分:0)
有两种选择可行。
使用Action<ulong> uploadCallback
的{{1}}参数。这可用于检查已上载的字节数,并可与您要发送的文件的大小进行比较。
在您上传的文件的路径上使用UploadFile(Stream input, string path, Action<ulong> uploadCallback)
,以检查该文件是否在磁盘上再次存在。