C#将PC上文件夹中的所有文件上传到FTP文件夹

时间:2016-03-08 20:27:38

标签: c# winforms upload ftp directory

因为我可以将所有.txt文件从一个文件夹上传到FTP文件夹。我只能上传一个文件,但我需要将计算机上文件夹内的所有文件上传到FTP文件夹

FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create("ftp://123.456.789.00/folder1/folder2" + "/" + Path.GetFileName("D:\\folderUpload\\1test.txt"));

            request.Method = WebRequestMethods.Ftp.UploadFile;
            request.Credentials = new NetworkCredential("username", "pass");
            request.UsePassive = true;
            request.UseBinary = true;
            request.KeepAlive = false;

            FileStream stream = File.OpenRead("D:\\folderUpload\\1test.txt");
            byte[] buffer = new byte[stream.Length];

            stream.Read(buffer, 0, buffer.Length);
            stream.Close();

            Stream reqStream = request.GetRequestStream();
            reqStream.Write(buffer, 0, buffer.Length);
            reqStream.Close();

            MessageBox.Show("Upload OK");

2 个答案:

答案 0 :(得分:0)

Tou可以做类似的事情(如果你想保留原始树或并行化它可以改进......):

static public void Main(string[] args)
    {
       DirectoryInfo directory = DirectoryInfo(@"C:\PathToUpload");
       foreach(var file in directory.GetFiles(*)){
           UploadFile(file, "ftp://123.456.789.00/folder1/folder2");
       }

   MessageBox.Show("Upload OK");

}


public void UploadFile(FileInfo file,string ftpUrl){    
    FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create(ftpUrl + "/" + file.Name);
    request.Method = WebRequestMethods.Ftp.UploadFile;
    request.Credentials = new NetworkCredential("username", "pass");
    request.UsePassive = true;
    request.UseBinary = true;
    request.KeepAlive = false;
    FileStream stream = File.OpenRead("D:\\folderUpload\\1test.txt");
    byte[] buffer = new byte[stream.Length];
    stream.Read(buffer, 0, buffer.Length);
    stream.Close();
    Stream reqStream = request.GetRequestStream();
    reqStream.Write(buffer, 0, buffer.Length);
    reqStream.Close();
}

答案 1 :(得分:-1)

public static void uploadFolder(string source, string uploadpath)
{
    WebRequest request = WebRequest.Create(uploadpath); 
    request.Credentials = new NetworkCredential(userName, password); 
    string[] files = Directory.GetFiles(source, "*.*"); 
    string[] subFolders = Directory.GetDirectories(source); 
    foreach(string file in files) 
    { 
        request = WebRequest.Create(file);
        request.Method = WebRequestMethods.Ftp.UploadFile; 
    }
    foreach(string subFolder in subFolders) 
    { 
        request = WebRequest.Create(uploadpath + "/"+ Path.GetFileName(subFolder)); 
        request.Method = WebRequestMethods.Ftp.MakeDirectory; <br/>
        request.Credentials = new NetworkCredential(userName,password); 
        uploadFolder(subFolder, uploadpath+"/"+Path.GetFileName(subFolder));
    }
}