2009-12-28 3 views
0

Je veux transférer des fichiers en utilisant ftp d'une manière simple et efficace. Par exemple, si nous voulons envoyer un fichier, nous mettons simplement le fichier entier avec les commandes, mais s'il s'agit d'un fichier volumineux et que la puissance du réseau est faible, automatiquement la vitesse de transfert sera réduite. Quelle sera la méthode efficace pour transférer un fichier énorme, même la force du réseau est faible?Transfert de fichiers dans FTP

Ci-dessous le morceau de code où je reçois une erreur, s'il vous plaît jeter un oeil à it.i employé enfiler ici:

public partial class Form1 : Form 
{ 
    ArrayList AscendingList = new ArrayList(); 
    ListViewItem Litem = null; 
    Thread MyThread = null; 
    ThreadStart Starter = null; 

    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void btn_split_Click(object sender, EventArgs e) 
    { 
     foreach (ListViewItem litem in listView1.Items) 
     { 
      Starter = delegate { SplitFile(litem.Text,litem.SubItems[1].Text,int.Parse(litem.SubItems[2].Text)); }; 
      MyThread = new Thread(Starter); 
      MyThread.IsBackground = true; 
      MyThread.Start(); 
     } 
    } 
    public void SplitFile(string inputFile, string outputPrefix, int chunkSize) 
    { 
     int pointr = 0; 
     byte[] buffer = new byte[chunkSize]; 

     using (FileStream fs = new FileStream(inputFile, FileMode.Open, FileAccess.Read, FileShare.None)) 
     { 
      int index = 0; 
      pointr = fs.Read(buffer, 0, buffer.Length); 
      while (pointr != 0) 
      { 
       using (FileStream fso = new FileStream(outputPrefix + "\\" + index + ".log", FileMode.Create)) 
       { 
        AscendingList.Add(fso.Name); 
        fso.Write(buffer, 0, pointr); 
        pointr = fs.Read(buffer, 0, buffer.Length); 
       } 
       index++; 
      } 
     } 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     Litem = new ListViewItem(); 
     Litem.Text = "E:\\butterfly.mpg"; 
     Litem.SubItems.Add("H:\\karthik"); 
     Litem.SubItems.Add("102400"); 
     listView1.Items.Add(Litem); 
    } 

    private void button2_Click(object sender, EventArgs e) 
    { 
     Litem = new ListViewItem(); 
     Litem.Text = "E:\\karthik.mpeg"; 
     Litem.SubItems.Add("H:\\karthik\\karthik"); 
     Litem.SubItems.Add("102400"); 
     listView1.Items.Add(Litem); 
    } 
} 

Répondre

-1

J'ai résolu le problème de fil, je mets la fonctionnalité de division dans une classe distincte. Je crée une nouvelle instance pour EVRY INPUT ET AFFECTEZ-LA À UN FILET.

1

Je crois que vous voulez accélérer vos transferts.

ce sera la méthode efficace pour transfert un fichier énorme, même le réseau strngth est faible

Ceci suppose que vous souhaitez écrire l'application vous-même, en utilisant FTP.

+0

salut j'ai déjà utilisé cette méthode j'ai de la difficulté à filer mon application – karthik

+0

Quelle est la difficulté? – torger

+0

En fait, je suis le cryptage, la compression et la division d'un fichier, je mets toutes ces fonctionnalités dans un fil, tout en exécutant l'application avec des fichiers multiples, il ne fonctionne pas, il donne une exception "xx.dat" est en usage.if c'est un un seul fichier signifie que cela fonctionne bien.thats où je suis resté bloqué pendant le dernier mois – karthik