2017-11-24 4 views
-3

ich arbeite an einem Programm für meine Schule. Ich bin gerade fertig, ich musste nur meine Datei auf einen FTP hochladen. Als ich den Code fertiggestellt und getestet habe, wurde die Anwendung in den Break-Modus versetzt. Wenn ich den FTP-Code entfernte, würde es immer noch funktionieren. hat jemand von Ihnen eine Ahnung was ist falsch? im mit core.NET C# hier ist mein Code:C# FTP Upload Probleme

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.IO; 
using System.Linq; 
using System.Net; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 

namespace School_0._1 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
      comboBox1.GetItemText(comboBox1.SelectedItem); 
      comboBox2.GetItemText(comboBox1.SelectedItem); 
      comboBox3.GetItemText(comboBox1.SelectedItem); 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      DialogResult dialogResult = MessageBox.Show("Weet je het zeker?", "Lesbord 1.0", MessageBoxButtons.YesNo); 
      if (dialogResult == DialogResult.Yes) 
      { 
       MessageBox.Show("Verstuurd"); 
       //hier de verstuur code 
       string path = @"E:\\test.txt"; 
       string selectedValue = comboBox1.SelectedItem.ToString(); 
       string selectedValue2 = comboBox2.SelectedItem.ToString(); 
       string selectedValue1 = comboBox3.SelectedItem.ToString(); 

       File.WriteAllText(path, selectedValue + " " + selectedValue2 + " " + selectedValue1); 
      } 
     } 

     private void button2_Click(object sender, EventArgs e) 
     { 
      if (MessageBox.Show("Weet je zeker dat je het programma af wil sluiten?", "Lesbord 1.0", MessageBoxButtons.OKCancel) == DialogResult.OK) 
      { 
       Application.Exit(); 
      } 
     } 

     private void tableLayoutPanel1_Paint(object sender, PaintEventArgs e) 
     { 
     } 

     private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) 
     { 
     } 

     private void dateTimePicker1_ValueChanged(object sender, EventArgs e) 
     { 
     } 

     private void button2_Click_1(object sender, EventArgs e) 
     { 
      System.Diagnostics.Process.Start(@"E\printscreen.jpeg"); 
     } 
    } 
} 

und hier ist der FTP-Code:

private static void Upload(string ftpServer, string userName, string password, string filename) 
{ 
    using (System.Net.WebClient client = new System.Net.WebClient()) 
    { 
     client.Credentials = new 
     System.Net.NetworkCredential(userName,password); 
     client.UploadFile(ftpServer+"/"+newFileInfo(filename).Name,"STOR",filename); 
    } 
} 
+0

ich es hinzufügen, vergessen zu, oops! mein Fehler. wird es jetzt aktualisieren –

+0

Was ist "Break-Modus"? Erkläre das Problem. Fange die Ausnahme. Debuggen Sie die Anwendung. Ihnen fehlen viele wichtige Schritte, bevor wir Ihnen sinnvoll helfen können. – Flater

Antwort

1

Wenn Sie mit Ihrem File.WriteAllText fertig sind, implementieren Sie einfach den Code, den Sie in this tuturial in Ihrer Upload Methode finden und rufen Sie ihn auf.

private void button1_Click(object sender, EventArgs e) 
{ 
    DialogResult dialogResult = MessageBox.Show("Weet je het zeker?", "Lesbord 1.0", MessageBoxButtons.YesNo); 

    if (dialogResult == DialogResult.Yes) 
    { 
     MessageBox.Show("Verstuurd"); 
     //hier de verstuur code 
     string selectedValue = comboBox1.SelectedItem.ToString(); 
     string selectedValue2 = comboBox2.SelectedItem.ToString(); 
     string selectedValue1 = comboBox3.SelectedItem.ToString(); 

     File.WriteAllText(@"E:\test.txt", selectedValue + " " + selectedValue2 + " " + selectedValue1); 

     Upload("ftp://www.myserver.com/", "myuser", "mypass", @"E:\test.txt"); 
    } 
} 

würde ich auch ein wenig try... catch Block implementieren, um mögliche Ausnahmen zu behandeln, wenn die Datei schreiben oder hochladen, da das Beispiel, das ich Ihnen Informationen über etwaige nicht implementiert. Zum Beispiel:

private void button1_Click(object sender, EventArgs e) 
{ 
    DialogResult dialogResult = MessageBox.Show("Weet je het zeker?", "Lesbord 1.0", MessageBoxButtons.YesNo); 

    if (dialogResult == DialogResult.Yes) 
    { 
     MessageBox.Show("Verstuurd"); 
     //hier de verstuur code 
     string selectedValue = comboBox1.SelectedItem.ToString(); 
     string selectedValue2 = comboBox2.SelectedItem.ToString(); 
     string selectedValue1 = comboBox3.SelectedItem.ToString(); 

     try { 
      File.WriteAllText(@"E:\test.txt", selectedValue + " " + selectedValue2 + " " + selectedValue1); 
     } catch (Exception e) { 
      MessageBox.Show("Error during file writing!"); 
      return; 
     } 

     try { 
      Upload("ftp://www.myserver.com/", "myuser", "mypass", @"E:\test.txt"); 
     } catch (Exception e) { 
      MessageBox.Show("Error during file upload!"); 
      return; 
     } 
    } 
} 

Die Umsetzung:

private static void Upload(string ftpServer, string userName, string 
password, string filename) 
    { 
     // Get the object used to communicate with the server. 
     FtpWebRequest request = (FtpWebRequest)WebRequest.Create(ftpServer); 
     request.Method = WebRequestMethods.Ftp.UploadFile; 

     // This example assumes the FTP site uses anonymous logon. 
     request.Credentials = new NetworkCredential(userName, password); 

     // Copy the contents of the file to the request stream. 
     StreamReader sourceStream = new StreamReader(filename); 
     byte [] fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd()); 
     sourceStream.Close(); 
     request.ContentLength = fileContents.Length; 

     Stream requestStream = request.GetRequestStream(); 
     requestStream.Write(fileContents, 0, fileContents.Length); 
     requestStream.Close(); 

     FtpWebResponse response = (FtpWebResponse)request.GetResponse(); 
     response.Close(); 
    } 
+0

und wo füge ich den Standort hinzu? im Upload-Befehl oder in der privaten statischen void? –

+0

Dies ist, wie Sie bevorzugen. Sie können entweder alle Ihre Parameter (FTP-Benutzer, FTP-Pass, FTP-Adresse, Dateipfad) in privaten statischen Strings innerhalb Ihrer Formularklasse definieren oder Sie können sie einfach inline schreiben. Wenn ich die Wahl hätte, würde ich mich für Ersteres entscheiden. –

+0

es funktioniert, aber es sagt "die Anwendung ist im Break-Modus" –

0

Sie sind nur in TXT-Datei zu schreiben ... Versuchen File.Save() Funktion nach
Datei. Schreibealltext()

+0

File.Save wird nicht akzeptiert? (Ich bin ein bisschen ein Noobie, wenn es um dieses Zeug geht) –