[C#] Téléchargement fichier Web [Résolu]

Signaler
Messages postés
714
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
19 janvier 2017
-
Messages postés
714
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
19 janvier 2017
-
Le code suivant marche 1 seule fois, lors de l'appel suivant, le creation du fichier temporaire (DestinationStream) envoie une exception car le fichier est déjà locké mais je ne vois pas pourquoi :(

private void DownloadFile (string sourceURL, string destinationPath)
{
try
{
WebRequest myWebRequest = WebRequest.Create(sourceURL);
WebResponse myWebResponse = myWebRequest.GetResponse();
Stream oReceiveStream = myWebResponse.GetResponseStream();

// Init & read first block
int iCount = 128;
byte []abBuffer = new byte [iCount];
iCount = oReceiveStream.Read (abBuffer, 0, iCount);

// Loop until data are remaining
MemoryStream MemoryStream = new MemoryStream();
while (iCount > 0)
{
MemoryStream.Write (abBuffer, 0, iCount);
iCount = oReceiveStream.Read (abBuffer, 0, abBuffer.Length);
}

// Write remote file to disk
Stream DestinationStream = File.Open(destinationPath, FileMode.Create);
BinaryWriter DestinationOutput = new BinaryWriter (DestinationStream);
DestinationOutput.Write (MemoryStream.GetBuffer (),0,(int)MemoryStream.Length);
DestinationOutput.Flush ();
DestinationOutput.Close ();
DestinationStream.Close ();

// Release all
oReceiveStream.Close();
MemoryStream.Close();
myWebResponse.Close();
}
catch (Exception e)
{
this.WriteToOutput (e.ToString (), Color.Red);
}
}

6 réponses

Messages postés
714
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
19 janvier 2017

Depuis le temps que je le dis, développer la nuit c'est bien mais le sommeil c'est mieux...
Un StreamReader dans une fonction de load où le Close() n'était pas appelé et même si c'est un objet local et bien il n'est pas encore détruit....
bon voilà problème réglé et ca fait un bout de code pour downloader un fichier par HTTP pour CS ;p
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
54
Messages postés
714
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
19 janvier 2017

Au premier appel ca fonctionne mais pas au 2ème.
Pourtant si je quitte l'appli et que je relance, le ficheir est tjs présent mais il le re download et écrase l'ancien.

----------------------------

C++ forever
C# amateur
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
54
Messages postés
714
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
19 janvier 2017

Voici le message d'IOException :
{"Le processus ne peut pas accéder au fichier "C:\\Documents and Settings\\Vincent\\Local Settings\\Temp\\liveupdatelist.xml", car il est en cours d'utilisation par un autre processus." }

En testant dans ce meme code, on peut le faire autant de fois que l'on veut.
Par contre la recherche se fait dans un thread. mais je V remonter plus haut je sens.
Messages postés
714
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
19 janvier 2017

Hum, visiblement c'est lors de la désérialisation avec XmlSerializer.Deserialize qui ne doit pas clore certains trucs.
Mais autant le StreamWriter a une methoe Close (), autant XmlSerializer non :(