2011-11-18 1 views
0

J'ai écrit un peu "Update Program" pour garder un .exe à jour pour le reste de mon équipe de développement. Cela fonctionnait bien, mais soudainement, ça a cessé de fonctionner.C# flux à distance pour le transfert de fichiers ne lit pas

J'ai déjà remarqué le problème: mon flux distant ne commence pas à lire.

 Uri patch = new Uri("http://********/*********/" + GetVersion().ToString() + ".exe"); 
     Int64 patchsize = PatchSize(patch); 
     var CurrentPath = String.Format("{0}\\", Environment.CurrentDirectory); 
     Int64 IntSizeTotal = 0; 
     Int64 IntRunning = 0; 
     string strNextPatch = (version + ".exe"); 

     using (System.Net.WebClient client = new System.Net.WebClient()) 
     { 
      using (System.IO.Stream streamRemote = client.OpenRead(patch)) 
      { 
       using (System.IO.Stream streamLocal = new FileStream(CurrentPath + strNextPatch, FileMode.Create, FileAccess.Write, FileShare.None)) 
       { 
        int intByteSize = 0; 

        byte[] byteBuffer = new Byte[IntSizeTotal]; 

        while ((intByteSize = streamRemote.Read(byteBuffer, 0, byteBuffer.Length)) > 0) 
        { 
         streamLocal.Write(byteBuffer, 0, intByteSize); 

         IntRunning += intByteSize; 

         double dIndex = (double)(IntRunning); 
         double dTotal = (double)byteBuffer.Length; 
         double dProgressPercentage = (dIndex/dTotal); 
         int intProgressPercentage = (int)(dProgressPercentage * 100); 

         worker.ReportProgress(intProgressPercentage); 
        } 
        streamLocal.Close(); 
       } 
       streamRemote.Close(); 

GetVersion() renvoie uniquement le numéro de version de la version actuelle du serveur du fichier .exe. Le problème est ici:

while ((intByteSize = streamRemote.Read(byteBuffer, 0, byteBuffer.Length)) > 0) 

Mon streamRemote juste ne retourne pas octets si cette clause while n'est pas rassasiée.

Des conseils pour moi?

+0

Non lié à votre problème, mais vous pouvez supprimer les appels Close() redondants - c'est à cela que servent les instructions using. Vous pouvez également empiler toutes vos données les unes sur les autres et vous bloquer à un niveau d'indentation. – GazTheDestroyer

+0

Merci! Je l'ai fait pour avoir un peu plus d'aperçu dans mon code. – Nop0x

Répondre

0

Je crois que le problème est sur le serveur. Je ferais des contrôles:

  • Est-ce que quelque chose a changé sur la configuration du serveur web qui vous empêche de télécharger des exécutables?
  • Vous vous connectez via un proxy?
  • Pouvez-vous accéder manuellement à la même URL (avec les mêmes informations d'identification utilisateur de votre application)?
+0

Eh bien, merci pour votre aide, mais j'ai déjà eu le problème. Octet [] byteBuffer = new Octet [IntSizeTotal]; devait être byte [] byteBuffer = new Byte [taille de la pièce]; et maintenant son fonctionnement :) – Nop0x

+1

Ok, pensé que c'était un problème externe comme vous l'avez dit "Il a l'habitude de bien fonctionner, mais soudainement il a cessé de fonctionner" :) – Strillo

Questions connexes