【问题标题】:Simple Application To Transfer File From Localhost To SFTP将文件从 localhost 传输到 SFTP 的简单应用程序
【发布时间】:2013-12-10 06:47:57
【问题描述】:

我希望创建一个简单的桌面应用程序,将文件从本地计算机传输到 SFTP 位置。

我尝试了以下操作,它将文件从本地计算机传输到我计算机上的另一个位置。但在如何传输到使用用户名和密码的 SFTP 位置时遇到了困难。

namespace SFTPTranfer
{
class Program
{
    static void Main(string[] args)
    {
        try
        {
            string fileToCopy = "C:\\TransferFileTest.txt";
            string newLocation = "C:\\copiedFiles\\copiedTransferFileTest.txt";
            //string newLocation = "https:\\URL\folder1\folder2";
            //string URLUser = "Test";
            //string URLPassword = "Password";
            string folderLocation = "C:\\copiedFiles";

            if (System.IO.Directory.Exists(folderLocation))
            {
                if (System.IO.File.Exists(fileToCopy))
                {
                    System.IO.File.Copy(fileToCopy, newLocation, true);
                    Console.WriteLine("File copied.");
                }
                else
                {
                    Console.WriteLine("No such file.");
                }
            }
            else
            {
                Console.WriteLine("No such directory.");
            }

        }
        catch (Exception ex)
        {
            Console.Write("Error : " + ex.Message);
        }

        Console.WriteLine("Done.");
        Console.ReadLine();
    }
}
}

任何帮助表示赞赏

更新

决定采用这种方式:http://blog.deltacode.be/2012/01/05/uploading-a-file-using-sftp-in-c-sharp/

工作正常。

【问题讨论】:

  • 你的新方法正是我提出的;)

标签: c# winforms visual-studio-2010 c#-4.0


【解决方案1】:

你必须像这样创建一个 FtpWebRequest:

FtpWebRequest request = (FtpWebRequest)WebRequest.Create("url");
request.KeepAlive = false;
request.UseBinary = true;
request.Credentials = new NetworkCredential("USERNAME", "PASSWORD");
request.Method = WebRequestMethods.Ftp.UploadFile;
fileInfo = new FileInfo("FILEPATH");
request.ContentLength = fileInfo.Length;
FileStream fileStream = fileInfo.OpenRead();
Stream requestStream = request.GetRequestStream();
while (totalBytes > 0)
{
   int bytes = fileStream.Read(buffer, 0, buffer.Length);
   requestStream.Write(buffer, 0, bytes);
   totalBytes = totalBytes - bytes;
}
fileStream.Close();
requestStream.Close();
FtpWebResponse uploadResponse = (FtpWebResponse)request.GetResponse();
string value = uploadResponse.StatusDescription;
uploadResponse.Close();

这对我来说适用于 FTP 连接。不确定它是否适用于 SFTP。但它应该工作

编辑 你必须设置

request.EnableSsl = true;

它应该适用于 SFTP

【讨论】:

  • 不,这不适用于 SFTP 连接。 SFTP 不同于 FTP。无法使用内置 .NET 类创建 SFTP 连接。
  • @Tomtom - 感谢以上。我将上述内容复制到我的解决方案中,我在 fileInfo、totalBytes 和缓冲区上遇到错误 - “名称 fileinfo 在当前上下文中不存在”...我需要包含一个库吗?另外,我在哪里放置 request.EnableSsl = true; ??谢谢
  • 需要参考System.IO;您可以在 request.GetRespons 之前放置的 EnableSSL。
【解决方案2】:

我可以推荐SSH.NET。这是一个简单的例子:

using(var fileStream = new FileStream(fileToCopy, FileMode.Open))
using(var client = new SftpClient(host, port, login, password))
{
    client.Connect();
    client.UploadFile(fileStream, "/path/on/server");
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-15
    • 1970-01-01
    • 2021-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-29
    相关资源
    最近更新 更多