如何在sftp中查找磁盘空间

时间:2014-03-14 09:47:52

标签: c# sftp

我是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();
}

请指教是正确的方法吗?或提供任何其他解决方案

1 个答案:

答案 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)。在第一个会话页面上,最好选择从不 关闭窗口退出,以确保您可以看到输出。