我是SFTP的新人。我在我的机器中创建了一个SFTP服务器位置(Windows 7)。我可以通过我的项目上传文件。我正在使用renci.Sshnet dll。现在我试图在SFTP服务器中获得剩余的磁盘空间。我试图通过执行命令来获取空间。但我坚持这一点并得到以下错误
System.ArgumentException was unhandled
HResult=-2147024809
Message=Offset and length were out of bounds for the array or count is greater than the number of elements from index to the end of the source collection.
Source=Renci.SshNet
StackTrace:
at Renci.SshNet.Session.WaitHandle(WaitHandle waitHandle)
at Renci.SshNet.Channels.Channel.WaitHandle(WaitHandle waitHandle)
at Renci.SshNet.Channels.ChannelSession.SendExecRequest(String command)
at Renci.SshNet.SshCommand.BeginExecute(AsyncCallback callback, Object state)
at LogFileArchive.LogFileArchive.runningcommand() in C:\Utilities\LogFileArchive\Program.cs:line 381
at LogFileArchive.LogFileArchive.Main(String[] args) in C:\Utilities\LogFileArchive\Program.cs:line 475
at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
InnerException:
我尝试的源代码如下
using (SshClient sshclient = new SshClient("Host", "Port", "Username", "Password"))
{
sshclient.Connect();
var cmd1 = sshclient.RunCommand("echo 1");
Console.WriteLine(cmd1.Result);
var cmd2 = sshclient.RunCommand("echo 2");
Console.WriteLine(cmd2.Result);
sshclient.Disconnect();
}
请指教是正确的方法吗?或提供任何其他解决方案
答案 0 :(得分:0)
关于标题问题:
正如SFTP - check free space available中所提到的,只有一种通过SFTP查询磁盘空间的官方方法。它不适用于SSH.NET客户端库(不确定核心FTP服务器)。然后是一个专有的OpenSSH扩展,不能与Core FTP Server一起使用。
关于例外:
您应该首先调试异常,因为这显然是SSH.NET库中的一个错误,因此很难远程帮助您。该库是开源的,没有依赖项,因此构建和调试它非常简单。另一方面,异常很可能是由核心FTP服务器返回的一些错误引起的(因为你的代码在OpenSSH运行时工作正常)。所以另一种方法是找出为什么(如果)核心FTP服务器错误。
由于它是Windows服务器,您应该尝试使用除echo
之外的其他命令。请注意,echo
在Windows上不可执行,它是Windows命令行解释程序的内部命令。所以它不能直接用作命令是很常见的(就像你无法从开始>运行)运行echo
一样。或者,尝试使用echo
间接运行cmd.exe /c "echo 1"
。
你也检查过服务器的日志文件吗?
接下来,首先尝试在GUI SSH客户端中运行该命令以查看输出是什么。例如。在PuTTY中转到 Connection> SSH 并在远程命令中指定您的命令(这相当于SshClient.RunCommand
)。在第一个会话页面上,最好选择从不 关闭窗口退出,以确保您可以看到输出。