2013-12-12 51 views
0

我是新手,我想用C#發送大文件到ftp,但是我無法發送超過500 MB的文件 - 1 GB。有人可以幫我嗎?謝謝。C#如何上傳大文件到FTP(文件大小必須爲500 MB - 1 GB)

我正在使用的代碼是:

private void btnUpload_Click_1(object sender, EventArgs e) 
    { 
     openFileDialog.ShowDialog(); 
     NetworkStream passiveConnection; 
     FileInfo fileParse = new FileInfo(openFileDialog.FileName); 
     FileStream fs = new 
     FileStream(openFileDialog.FileName, FileMode.Open); 
     byte[] fileData = new byte[fs.Length]; 
     fs.Read(fileData, 0, (int)fs.Length); 
     passiveConnection = createPassiveConnection(); 
     string cmd = "STOR " + fileParse.Name + "\r\n"; 
     tbStatus.Text += "\r\nSent:" + cmd; 
     string response = sendFTPcmd(cmd); 
     tbStatus.Text += "\r\nRcvd:" + response; 
     passiveConnection.Write(fileData, 0, (int)fs.Length); 
     passiveConnection.Close(); 
     MessageBox.Show("Uploaded"); 
     tbStatus.Text += "\r\nRcvd:" + new 
     StreamReader(NetStrm).ReadLine(); getRemoteFolders(); 
    } 
+3

「不能發送」是什麼意思? – zerkms

+0

是否有一個特定的原因,您不使用[System.Net.FtpWebRequest](http://msdn.microsoft.com/en-us/library/system.net.ftpwebrequest.getresponse(v = vs.110)。 aspx)和它的FtpWebResponse對應? – rene

回答

1

不讀取整個文件(它會消耗太多的內存和時間),由塊中讀取:

NetworkStream passiveConnection; 
FileInfo fileParse = new FileInfo(openFileDialog.FileName); 
using(FileStream fs = new FileStream(openFileDialog.FileName, FileMode.Open)) 
{ 
    byte[] buf = new byte[8192]; 
    int read; 

    passiveConnection = createPassiveConnection(); 
    string cmd = "STOR " + fileParse.Name + "\r\n"; 
    tbStatus.Text += "\r\nSent:" + cmd; 
    string response = sendFTPcmd(cmd); 
    tbStatus.Text += "\r\nRcvd:" + response; 

    while ((read = fs.Read(buf, 0, buf.Length) > 0) 
    { 
     passiveConnection.Write(buf, 0, read); 
    } 
} 

passiveConnection.Close(); 
MessageBox.Show("Uploaded"); 
tbStatus.Text += "\r\nRcvd:" + new 
StreamReader(NetStrm).ReadLine(); 
getRemoteFolders(); 

是的,那麼FtpWebRequest

+0

謝謝你,先生... :) – user3093720

+2

只需使用'fs.CopyTo(passiveConnection)'。 –

+0

@ user3093720 :)不客氣,先生:)。如果它對你有幫助,請標記爲答案。 Cory的評論也很有用。 – Tony

相關問題