C# 如何通过FTP上传文件夹?

C# 如何通过FTP上传文件夹?,c#,windows,forms,upload,ftp,C#,Windows,Forms,Upload,Ftp,我正试图通过FTP上传一个文件夹(及其内容),但当我尝试这样做时,我不断收到一个错误,说没有选择任何文件 你知道有什么方法可以让它上传文件夹及其内容吗? 这是我正在使用的代码。(我想上传文件夹插件中的所有文件): 这是我正在使用的潜艇: public void UploadFile(string _FileName, string _UploadPath, string _FTPUser, string _FTPPass) { System.IO.FileInfo _FileInfo =

我正试图通过FTP上传一个文件夹(及其内容),但当我尝试这样做时,我不断收到一个错误,说没有选择任何文件

你知道有什么方法可以让它上传文件夹及其内容吗?

这是我正在使用的代码。(我想上传文件夹插件中的所有文件):

这是我正在使用的潜艇:

public void UploadFile(string _FileName, string _UploadPath, string _FTPUser, string _FTPPass)
{
    System.IO.FileInfo _FileInfo = new System.IO.FileInfo(_FileName);

    // Create FtpWebRequest object from the Uri provided
    System.Net.FtpWebRequest _FtpWebRequest = (System.Net.FtpWebRequest)System.Net.FtpWebRequest.Create(new Uri(_UploadPath));

    // Provide the WebPermission Credintials
    _FtpWebRequest.Credentials = new System.Net.NetworkCredential(_FTPUser, _FTPPass);

    // By default KeepAlive is true, where the control connection is not closed
    // after a command is executed.
    _FtpWebRequest.KeepAlive = false;

    // set timeout for 20 seconds
    _FtpWebRequest.Timeout = 20000;

    // Specify the command to be executed.
    _FtpWebRequest.Method = System.Net.WebRequestMethods.Ftp.UploadFile;

    // Specify the data transfer type.
    _FtpWebRequest.UseBinary = true;

    // Notify the server about the size of the uploaded file
    _FtpWebRequest.ContentLength = _FileInfo.Length;

    // The buffer size is set to 2kb
    int buffLength = 2048;
    byte[] buff = new byte[buffLength];

    // Opens a file stream (System.IO.FileStream) to read the file to be uploaded
    System.IO.FileStream _FileStream = _FileInfo.OpenRead();

    try
    {
        // Stream to which the file to be upload is written
        System.IO.Stream _Stream = _FtpWebRequest.GetRequestStream();

        // Read from the file stream 2kb at a time
        int contentLen = _FileStream.Read(buff, 0, buffLength);

        // Till Stream content ends
        while (contentLen != 0)
        {
            // Write Content from the file stream to the FTP Upload Stream
            _Stream.Write(buff, 0, contentLen);
            contentLen = _FileStream.Read(buff, 0, buffLength);
        }

        // Close the file stream and the Request Stream
        _Stream.Close();
        _Stream.Dispose();
        _FileStream.Close();
        _FileStream.Dispose();
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message, "Upload Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
}

您的URI不正确,需要在URI中指定文件名

// Create FtpWebRequest object from the Uri provided
    System.Net.FtpWebRequest _FtpWebRequest = (System.Net.FtpWebRequest)System.Net.FtpWebRequest.Create(new Uri(_UploadPath + "/" + _FileInfo.Name));

也可以考虑在流中使用“使用”关键字来处理它们,以防异常。

using (System.IO.FileStream _FileStream = _FileInfo.OpenRead())
                {

                    // Stream to which the file to be upload is written

                    using (System.IO.Stream _Stream = _FtpWebRequest.GetRequestStream())
                    {
                        // Read from the file stream 2kb at a time
                        int contentLen = _FileStream.Read(buff, 0, buffLength);

                        // Till Stream content ends
                        while (contentLen != 0)
                        {
                            // Write Content from the file stream to the FTP Upload Stream
                            _Stream.Write(buff, 0, contentLen);
                            contentLen = _FileStream.Read(buff, 0, buffLength);
                        }

                        //No need to Close the file stream and the Request Stream

                    }
                }

我应该将您创建的第一行代码放在哪里?你不调用子上传文件。我仍然不能上传文件夹。我只是在你的上传文件方法中编辑了代码。如果要上载文件夹,必须循环遍历文件夹中的文件,并事先使用Ftp.MakeDirectory方法。无论哪种方式,这都可能不是您希望上载文件的方式。您应该将方法修改为异步的。
using (System.IO.FileStream _FileStream = _FileInfo.OpenRead())
                {

                    // Stream to which the file to be upload is written

                    using (System.IO.Stream _Stream = _FtpWebRequest.GetRequestStream())
                    {
                        // Read from the file stream 2kb at a time
                        int contentLen = _FileStream.Read(buff, 0, buffLength);

                        // Till Stream content ends
                        while (contentLen != 0)
                        {
                            // Write Content from the file stream to the FTP Upload Stream
                            _Stream.Write(buff, 0, contentLen);
                            contentLen = _FileStream.Read(buff, 0, buffLength);
                        }

                        //No need to Close the file stream and the Request Stream

                    }
                }