Avatar billede gargazol Nybegynder
16. februar 2006 - 01:27 Der er 6 kommentarer

Download status

Jeg er igang med et lave et program der skal hente en opdatering på nettet en gang i mellem, men for at brugeren kan se hvor langt den er nået, vill jeg gerne have en status bar for hvor langt den er nået. hvordan?

lige pt bruger jeg:

WebClient webClient = new WebClient();
webClient.DownloadFile("http://wow.allakhazam.com/itemlist.xml", ProgramPath + "\\itemlist.xml");

For ikke at hænge mit program bliver det kørt i en ny tråd.

Jeg er da villig til at bruge en anden måde at få xml filen ned på hvis det kan gøre det nemmere.
Avatar billede arne_v Ekspert
16. februar 2006 - 04:16 #1
en (Http)WebRequest og Read fra en Stream ville ihvertfald give
dig muligheden


jeg ved ikke om der er smartere metoder
Avatar billede gargazol Nybegynder
16. februar 2006 - 05:13 #2
Jeg er lidt ny til C#/prgrammering, så hvis du kan give et eksempel?

har prøvet:
HttpWebRequest myReq = (HttpWebRequest)WebRequest.Create("http://wow.allakhazam.com/itemlist.xml");
HttpWebResponse myResponse = (HttpWebResponse)myReq.GetResponse();
MessageBox.Show(myResponse.GetResponseStream().Length.ToString());

Men den tillader ikke søgning, så hvordan skal jeg få længden, og i det hele taget modtage stream?
Avatar billede dr_chaos Nybegynder
16. februar 2006 - 08:11 #3
her er et eksempel:
try {
string imgPath = "http://www.google.com/images/logo.gif";
HttpWebRequest wRequest = ((HttpWebRequest)(HttpWebRequest.Create(imgPath)));
WebResponse wResponse = ((WebResponse)(wRequest.GetResponse()));
FileStream sWriter = new FileStream("new.gif", FileMode.OpenOrCreate);
int ContentLength = wResponse.ContentLength;
string sizeInKB = (ContentLength / 1024).ToString();
this.Text = "The Size of the Image is: " + sizeInKB.Substring(0, sizeInKB.IndexOf(".") + 3) + "KB";
byte[] buffer = new byte[ContentLength];
int length = ContentLength;
int position = 0;
int complete = 1;
int returned = 0;
ProgressBar1.Value = 0;
ProgressBar1.Maximum = ContentLength;
while (!(complete == 0)) {
  position = wResponse.GetResponseStream().Read(buffer, returned, length);
  sWriter.Write(buffer, returned, position);
  complete = position;
  returned += position;
  length -= position;
  ProgressBar1.Step = returned;
  ProgressBar1.PerformStep();
}
this.Text = "Completed download";
sWriter.Close();
wRequest = null;
} catch (Exception ex) {
Console.WriteLine(ex.Message);
} catch (WebException webex) {
Console.WriteLine(webex.Message);
}
Avatar billede dr_chaos Nybegynder
16. februar 2006 - 08:13 #4
Avatar billede gargazol Nybegynder
16. februar 2006 - 15:11 #5
Der er mit problem igen, wResponse.ContentLength giver mig -1.

hvis jeg bruger min browser kan jeg heller ikke få størelsen af filen, så måske er det slet ikke muligt fra den side?
Avatar billede arne_v Ekspert
16. februar 2006 - 15:21 #6
Content-Length HTTP headeren er optionalÆ

14.13 Content-Length

  The Content-Length entity-header field indicates the size of the
  entity-body, in decimal number of OCTETs, sent to the recipient or,
  in the case of the HEAD method, the size of the entity-body that
  would have been sent had the request been a GET.

      Content-Length    = "Content-Length" ":" 1*DIGIT

  An example is

      Content-Length: 3495

  Applications SHOULD use this field to indicate the transfer-length of
  the message-body, unless this is prohibited by the rules in section
  4.4.

  Any Content-Length greater than or equal to zero is a valid value.
  Section 4.4 describes how to determine the length of a message-body
  if a Content-Length is not given.

  Note that the meaning of this field is significantly different from
  the corresponding definition in MIME, where it is an optional field
  used within the "message/external-body" content-type. In HTTP, it
  SHOULD be sent whenever the message's length can be determined prior
  to being transferred, unless this is prohibited by the rules in
  section 4.4.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester