2010-02-10 4 views
1

Existe-t-il un moyen simple de créer un transfert de priorité basse d'un fichier? J'ai beaucoup de fichiers sur mon serveur et parfois je transfère d'autres choses aussi. Existe-t-il un moyen facile de transférer mon application lentement lorsque mon réseau est occupé?transfert de fichier http de priorité faible?

+0

Qu'est-ce que vous utilisez pour transférer le fichier? scp? ftp? wget? Un autre outil? Remarque curl a une option --limit-rate, voir http://curl.haxx.se/docs/manpage.html – maxpolk

+0

Cela vous aidera si vous pouvez ajouter du code pour la façon dont vous faites le transfert de fichiers maintenant. –

+0

@sam: 'nouveau WebClient(). DownloadFile (url, fn);' @ ux9i: Ce n'est pas important pour moi ce que j'utilise. Peut-être que je vais lancer un processus de boucle –

Répondre

3

Découvrez BITS. Voici un exemple rapide à transférer en tant que faible priorité:

using (var done = new EventWaitHandle(false, EventResetMode.ManualReset)) 
    { 
     var manager = new Manager(); 
     var job = manager.CreateJob("Test Job Name"); 
     var jobevents = new JobEvents(); 

     job.AddFile(
      @"F:\DEV\TestBITS\TestBITS\dotnetfx35.exe", 
      "http://download.microsoft.com/download/2/0/e/20e90413-712f-438c-988e-fdaa79a8ac3d/dotnetfx35.exe"); 
     job.Priority = JobPriority.Low; 
     jobevents.JobTransferred += (sender, e) => { e.Job.Complete(); done.Set(); }; 
     jobevents.JobError += (sender, e) => { e.Job.Cancel(); done.Set(); }; 
     jobevents.AddJob(job); 
     job.ResumeJob(); 
     done.WaitOne(); 
    } 
1

Utilisez WebClient.OpenRead et ajoutez un peu de sommeil au milieu de la lecture de la réponse. Quelque chose le long de ces lignes:

using(var client = new WebClient()) 
using(var input = client.OpenRead("http://whatever.com/myfile.txt")) 
using(var output = File.OpenWrite("c:/temp/myfile.txt")) 
{ 
    var length = long.Parse(client.ResponseHeaders["content-length"]); 
    var buffer = new byte[32768]; 
    long totalRead = 0; 
    while(totalRead < length) 
    { 
     int read = input.Read(buffer, 0, buffer.Length); 
     if (read != 0) 
     { 
      output.Write(buffer, 0, read); 
      totalRead += read; 
     } 
     Thread.Sleep(100); // This is what slows down the download, make number bigger to download slower 
    } 
}   
Questions connexes