[C#] Téléchargement fichier Web

Résolu
scoubidou944 Messages postés 714 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 19 janvier 2017 - 9 mai 2006 à 00:19
scoubidou944 Messages postés 714 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 19 janvier 2017 - 9 mai 2006 à 12:29
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

scoubidou944 Messages postés 714 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 19 janvier 2017
9 mai 2006 à 12:29
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
3
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
9 mai 2006 à 08:59
0
scoubidou944 Messages postés 714 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 19 janvier 2017
9 mai 2006 à 12:11
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
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
9 mai 2006 à 12:17
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
scoubidou944 Messages postés 714 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 19 janvier 2017
9 mai 2006 à 12:21
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.
0
scoubidou944 Messages postés 714 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 19 janvier 2017
9 mai 2006 à 12:26
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 :(
0
Rejoignez-nous