Использовать SFTP вместо FTP в более старой версии C # (2010 Express) - PullRequest
0 голосов
/ 23 октября 2019

Мне нужно изменить старый сценарий C # (созданный еще в 2010 году в C # Express), чтобы использовать SFTP вместо FTP. Потребовалось некоторое время, чтобы вытащить этот скрипт из старого репозитория и загрузить версию C # 2010 Express, чтобы открыть скрипт! Но мне наконец-то это удалось. Я никогда не кодировал на C #, поэтому будьте добры. У нас есть несколько удаленных компьютеров, которые должны передавать файлы на сервер и с сервера в их сети. Этот скрипт представляет собой DLL-файл, на который ссылаются некоторые другие программы в этих системах, поэтому мне нужно будет изменить вызовы этого DLL-файла в этих скриптах. Я исследовал использование SFTP в C #, и из того, что я видел, я подумал, что лучше всего установить Renci.SshNet, чтобы он был установлен в качестве ссылки в проекте. Я хочу изменить приведенную ниже функцию, чтобы использовать SFTP вместо FTP, но я не совсем уверен, с чего начать -

    public TimeSpan FTPTo(string strFTPServer, string strLocalFileandPath, string strFTPFileandPath, string strFTPUser, string strFTPPassword)
    {
        try
        {
            DateTime dtStart = DateTime.Now;
            FtpWebRequest ftp = (FtpWebRequest)FtpWebRequest.Create(strFTPServer + "/" + strFTPFileandPath);
            ftp.Proxy = null;
            ftp.Credentials = new NetworkCredential(strFTPUser, strFTPPassword);
            //userid and password for the ftp server to given

            ftp.KeepAlive = true;
            ftp.UseBinary = true;
            ftp.Method = WebRequestMethods.Ftp.UploadFile;
            FileStream fs = File.OpenRead(strLocalFileandPath);
            byte[] buffer = new byte[fs.Length];
            fs.Read(buffer, 0, buffer.Length);
            fs.Close();
            Stream ftpstream = ftp.GetRequestStream();
            ftpstream.Write(buffer, 0, buffer.Length);
            ftpstream.Close();
            return DateTime.Now - dtStart;
        }
        catch (Exception ex1)
        {
            throw ex1;
        }
    }

Буду признателен за любые предложения / помощь.

1 Ответ

2 голосов
/ 23 октября 2019

Чтобы загрузить файл на SFTP-сервер с использованием SSH.NET, используйте SftpClient.UploadFile.

Тривиальный пример:

var client = new SftpClient("example.com", "username", "password");
client.Connect();

using (var sourceStream = File.Open(@"C:\local\path\file.ext"))
{
    client.UploadFile(sourceStream, "/remote/path/file.ext");
}

Нет никакого отношения к вашему исходному коду. API совершенно другой. Вы должны начать с нуля.

...