Ошибка «Нет такого файла» при попытке загрузить файл с помощью Renci.SshNet с использованием SftpClient - PullRequest
0 голосов
/ 15 мая 2019

Работает, когда я скачиваю файл с другого сервера. Я могу удалить файлы и получить список каталогов, но не могу загрузить файл. Единственное исключение, которое я получаю, - «Нет такого файла», даже когда я использую файл, возвращенный из вызова ListDirectory. На работающем сервере установлены ключи SSH, а на сервере не установлены ключи SSH. Renci.SshNet поддерживает только ftp с серверов с установленным SSH?

    private void button7_Click(object sender, EventArgs e)
    {
        string host = "ether4";

        string pathLocalFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "factor_out.txt");

        using (SftpClient sftp = new SftpClient(host, _username, _password))
        {
            try
            {
                sftp.Connect();
                var files = sftp.ListDirectory("/factor/dktest/pdi");
                sftp.ChangeDirectory("/factor/dktest/pdi");
                Debug.Print(sftp.WorkingDirectory);                     // <-- /factor/dktest/pdi
                foreach (var file in files)
                {
                    using (Stream fileStream = File.OpenWrite(pathLocalFile))
                    {
                        //if (!file.Name.StartsWith("."))
                        //    sftp.DownloadFile(file.Name, fileStream); // <-- Exception thrown here

                        if (!file.FullName.EndsWith("."))
                        {
                            sftp.DownloadFile(file.FullName, fileStream);   // <-- Exception thrown here
                            break;
                        }
                    }
                }

                sftp.Disconnect();
            }
            catch (Exception er)
            {
                Console.WriteLine("An exception has been caught " + er.ToString()); // No Such File
            }
        }
    }

Полное сообщение об ошибке: «Нет такого файла». Там нет InnerException. HResult = -2146233088.

file.FullName = "/factor/dktest/pdi/gl_accounts.txt"

StackTrace
   at Renci.SshNet.Common.AsyncResult.EndInvoke()
   at Renci.SshNet.Sftp.SftpSession.EndOpen(SftpOpenAsyncResult asyncResult)
   at Renci.SshNet.ServiceFactory.CreateSftpFileReader(String fileName, ISftpSession sftpSession, UInt32 bufferSize)
   at Renci.SshNet.SftpClient.InternalDownloadFile(String path, Stream output, SftpDownloadAsyncResult asyncResult, Action`1 downloadCallback)
   at Renci.SshNet.SftpClient.DownloadFile(String path, Stream output, Action`1 downloadCallback)
   at FtpTesting.frmSshNet.button7_Click(Object sender, EventArgs e) in C:\\Development\\FtpTesting\\FtpTesting\\frmSshNet.cs:line 98"

1 Ответ

1 голос
/ 21 мая 2019

Вы отметили свой вопрос , но используете код SFTP.

Хотя это не совсем ответ на вашу непосредственную проблему, похоже, вам действительно нужно использовать FTP. Возможно, ваш SFTP-сервер как-то сломан.

SSH.NET не поддерживает FTP. Вы можете использовать .NET FtpWebRequest или какую-либо стороннюю клиентскую библиотеку FTP.

...