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?
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
Merci! Je l'ai fait pour avoir un peu plus d'aperçu dans mon code. – Nop0x