【问题标题】:Copying files within Remote unix server using Renci SSH.NET使用 Renci SSH.NET 在远程 unix 服务器中复制文件
【发布时间】:2019-01-15 21:06:36
【问题描述】:

我正在尝试将文件从远程 unix 服务器中的一个文件夹复制到另一个文件夹。我正在使用 C# 中的 Web 应用程序并使用 Renci SSH.Net 进行该过程。当我使用 Cp 命令时,在 readline 中添加了额外的空间,我收到了错误,因为

cp: cannot stat `folder1/folder_two/fol_three/changecolumn.txt': 没有这样的文件 或目录

我使用了以下代码:

SshClient sshclient = new SshClient("hostname", "username", "pwd");
sshclient.Connect();
ShellStream stream = sshclient.CreateShellStream("cmsd", 80, 24, 800, 600, 1024);
sendCommand("sudo su - wwabc1", stream).ToString();
sendCommand("whoami", stream).ToString();
sendCommand("cp / folder1/folder_two/fol_three/" + uploadedfileName + uploadedfileExt + " /Target1/folder1/folder_two/target/", stream).ToString();

public StringBuilder sendCommand(string customCMD, ShellStream stream)
        {
            StringBuilder answer;
            var reader = new StreamReader(stream);
            var writer = new StreamWriter(stream);
            writer.AutoFlush = true;
            WriteStream(customCMD, writer, stream);
            answer = ReadStream(reader);
            return answer;
        }

        private void WriteStream(string cmd, StreamWriter writer, ShellStream stream)
        {
            writer.WriteLine(cmd);
            while (stream.Length == 0)
            {
                Thread.Sleep(500);
            }
        }

        private StringBuilder ReadStream(StreamReader reader)
        {
            StringBuilder result = new StringBuilder();

            string line;
            while ((line = reader.ReadLine()) != null)
            {
                result.AppendLine(line);
            }
            return result;
        }

结果数据如下:

cp / folder1/folder_two/fol_three/changecolumn
< cp / folder1/folder_two/fol_three/changecolumnn                         ame.txt  /wwabc1/Target1

</test_files/changecolumnname.txt  /wwabc1/Target1/                         folder1/folder_two/target/
cp: omitting directory `/'
cp: cannot stat `folder1/folder_two/fol_three//changecolumnname.txt': No such file or directory
[wwabc1@host ~]$ 
[wwabc1@host ~]$ 

中间添加了太多空格,但我传递的信息没有中间的空格。如何解决这个问题?谢谢

【问题讨论】:

  • 我猜问题出在uploadedfileName 和uploadedfileExt,你没有提供源代码
  • uploadedfileName 和 UploadedfileExt 包含的数据为 -changecolumnname.txt
  • 是的,但是是吗?您的错误消息表明情况并非如此。试试var s = $"cp / folder1/folder_two/fol_three/{uploadedfileName}{uploadedfileExt} /Target1/folder1/folder_two/target/" 看看你会得到什么。
  • 顺便说一句,如果你想将一个流复制到另一个流,你可以这样做stream1.CopyTo(stream2)
  • 我应该在初始文件夹1的前面添加主机名吗?

标签: c# ssh.net


【解决方案1】:

这里:

sendCommand("cp / folder1...

注意第一个/后面的空格。

【讨论】:

  • 我将问题标记为错字
  • 我删除了那个空间。在我发布的输出中,您可以看到空格为
  • 这不是错字问题
  • 那里的空间都是你使用“shell”而不是“exec”通道的结果——我在之前对你的其他问题stackoverflow.com/q/54194139/850848的回答中不鼓励你使用它——实际上很可能与您的直接问题无关 - 您可以在实际的错误消息中看到,其中文件名不包含空格:cp: cannot stat 'folder1/folder_two/fol_three//changecolumnname.txt': No such file or directory.
  • 您的文件名似乎无效 - 因此您的下一个问题(在修复@Neil 建议的问题后)仍然很可能是(另一个)错字。
猜你喜欢
  • 1970-01-01
  • 2014-06-09
  • 1970-01-01
  • 1970-01-01
  • 2015-12-12
  • 1970-01-01
  • 1970-01-01
  • 2022-01-17
  • 2011-05-09
相关资源
最近更新 更多