[ Pobierz całość w formacie PDF ]
.Kolejna metoda zdarzeniowa, którą stworzymy, będzie odpowiadała za zmianęstatusu pobierania pliku (listing 5.80).Listing 5.80.Utworzenie nowego zdarzenia UploadProgressChangedEventHandlerpublic delegate void UpProgressChangedEventHandler(object sender,UploadProgressChangedEventArgs e);public event UpProgressChangedEventHandler UpProgressChanged; Rozdział 5.f& Aplikacje TCP i UDP 129protected virtual void OnUploadProgressChanged(object sender,UploadProgressChangedEventArgs e){if (UpProgressChanged != null) UpProgressChanged(sender, e);}5.Wracamy teraz do metod zdarzeniowych client_UploadProgressChangedi client_UploadFileCompleted.Uzupełniamy je o kod z listingu 5.81.Listing 5.81.Metody zdarzeniowe związane z zakończeniem pobierania i ze zmianą wskaznika pobieraniavoid client_UploadProgressChanged(object sender, UploadProgressChangedEventArgs e){this.OnUploadProgressChanged(sender, e);}void client_UploadFileCompleted(object sender, UploadFileCompletedEventArgs e){this.OnUploadCompleted(sender, e);}Projekt 41.Klient FTP.Wywołanie metody wysyłającejplik asynchronicznieNapisanej w poprzednim projekcie metody użyjemy teraz w naszej aplikacji głównej.1.Przechodzimy do widoku projektu FormMain.2.Dla przycisku buttonUpload tworzymy metodę zdarzeniową Click.Będzieona inicjowała asynchroniczne wysyłanie pliku na serwer FTP (listing 5.82).Listing 5.82.Inicjacja wysyłania pliku na serwer FTPprivate void buttonUpload_Click(object sender, EventArgs e){if (openFileDialog1.ShowDialog() == DialogResult.OK){try{client.UploadFileAsync(openFileDialog1.FileName);buttonDownload.Enabled = false;buttonUpload.Enabled = false;}catch (Exception ex){MessageBox.Show(ex.Message, "Błąd");} 130 C#.Tworzenie aplikacji sieciowych.Gotowe projekty}}3.W metodzie buttonConnect_Click zapisujemy deklaracje nowych metodzdarzeniowych (listing 5.83).Listing 5.83.Uzupełniona metoda inicjalizująca połączenie FTPprivate void buttonConnect_Click(object sender, EventArgs e){if (comboBoxServer.Text != string.Empty & comboBoxServer.Text.Trim() !=String.Empty)try{string serverName = comboBoxServer.Text;//nazwa hosta nie może zaczynać się od ftp://if (serverName.StartsWith("ftp://"))serverName = serverName.Replace("ftp://","");client = new FtpClient(serverName, textBoxLogin.Text,maskedTextBoxPass.Text);client.DownProgressChanged += new FtpClient.DownProgressChangedEventHandler(client_DownProgressChanged);client.DownCompleted += new FtpClient.DownCompletedEventHandler(client_DownCompleted);client.UpCompleted += new FtpClient.UpCompletedEventHandler(client_UpCompleted);client.UpProgressChanged += new FtpClient.UpProgressChangedEventHandler(client_UpProgressChanged);GetFtpContent(client.GetDirectories());textBoxFtpPath.Text = client.FtpDirectory;toolStripStatusLabelServer.Text = "Serwer: ftp://" + client.Host;buttonConnect.Enabled = false;buttonDisconnect.Enabled = true;buttonDownload.Enabled = true;buttonUpload.Enabled = true;}catch (Exception ex){MessageBox.Show(ex.Message, "Błąd", MessageBoxButtons.OK,MessageBoxIcon.Error);}else{MessageBox.Show("Wprowadz nazwę serwera FTP", "Błąd");comboBoxServer.Text = string.Empty;}}4.Dla zadeklarowanej na listingu 5.83 metody client_UpCompleted piszemykod znajdujący się na listingu 5.84. Rozdział 5.f& Aplikacje TCP i UDP 131Listing 5.84.Metoda wywoływana po zakończeniu asynchronicznego pobierania plikuvoid client_UpCompleted(object sender, System.Net.UploadFileCompletedEventArgs e){if (e.Cancelled || e.Error != null){MessageBox.Show("Błąd: " + e.Error.Message);client.UploadCompleted = true;buttonUpload.Enabled = true;buttonDownload.Enabled = true;return;}client.UploadCompleted = true;buttonUpload.Enabled = true;buttonDownload.Enabled = true;MessageBox.Show("Wysłano plik");try{GetFtpContent(client.GetDirectories());}catch (Exception ex){MessageBox.Show(ex.Message, "Błąd");}}5.Metodę client_UpProgressChanged uzupełniamy o kod z listingu 5.85.Listing 5.85.Metoda wyświetlająca aktualną wielkość pobieranego plikuvoid client_UpProgressChanged(object sender,System.Net.UploadProgressChangedEventArgs e){toolStripStatusLabelDownload.Text = "Wysłano: " + (e.BytesSent /(double)1024).ToString() + " kB";}Projekt 42.Klient FTP.Kasowanie plikuJeżeli posiadamy odpowiednie uprawnienia, możemy kasować pliki znajdujące się naserwerze FTP.Konto anonimowe zwykle nie daje takiej możliwości.Do tego zadaniaużyjemy metody DeleteFile klasy FtpWebRequest.W metodzie Create klasy WebRequestnależy podać pełną ścieżkę dostępu do pliku, który chcemy usunąć.1.Przechodzimy do widoku kodu klasy FtpClient.2.Dla klasy FtpClient deklarujemy metodę umożliwiającą usunięcie plikuz serwera FTP (listing 5.86). 132 C#.Tworzenie aplikacji sieciowych.Gotowe projektyListing 5.86.Metoda kasująca plik z zasobów FTPpublic string DeleteFile(string nazwa){try{FtpWebRequest request = (FtpWebRequest)WebRequest.Create(ftpDirectory+"//"+nazwa);request.Method = WebRequestMethods.Ftp.DeleteFile;request.Credentials = new NetworkCredential(this.userName,this.password);request.KeepAlive = false;request.UsePassive = true;FtpWebResponse response = (FtpWebResponse)request.GetResponse();Stream stream = response.GetResponseStream();return response.StatusDescription;}catch (Exception ex){throw new Exception("Błąd: Nie można usunąć pliku " + nazwa +" (" + ex.Message + ")");}}Kod ten jest bardzo podobny do metody GetDirectories.Różnica polegana zastosowaniu metody DeleteFile.W argumencie metody Create klasyWebRequest podajemy pełną ścieżkę dostępu do pliku, który chcemy skasować.3.Przechodzimy do widoku formy.4.Kasowanie będzie następowało po naciśnięciu klawisza F8.Własność KeyPreviewformy głównej zmieniamy na true.Umożliwi nam to odczytywanie koduklawiszy, które zostały naciśnięte na formie.5.Dla metody zdarzeniowej KeyDown formy głównej piszemy kod z listingu 5.87.Listing 5.87 [ Pobierz całość w formacie PDF ]

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • funlifepok.htw.pl
  •