Problem :(

tonray

Grünschnabel
Ich habe ein PRoblem und zwar finde ich hier den fehler nicht...
goproblemup


Vielen dank für eure hilfe.
 
Also.

Ich möchte ein Programm erstellen, wo ich in ein Fenster Daten eingebe, welche dann in eine Textdatei geschrieben werden, wenn ich Button-1 drücke.
Diese Textdatei soll dann auf einen Ftp-Server hochgeladen werden.

Code:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Timer1.Start()
        ftpclient.Connect("sniffer.bplacced.net", "sniffer", "ranger")
        My.Computer.FileSystem.WriteAllText((ftpclient.GetFiles("").Length + 1).ToString, TextBox1.Text + vbNewLine + TextBox2.Text, False)
        ftpclient.UploadFile((ftpclient.GetFiles("").Length + 1).ToString(), (ftpclient.GetFiles("").Length + 1).ToString)

End Sub

Das ist die Ausgabe

Liegt es daran ?

Eine Ausnahme (erste Chance) des Typs "System.NullReferenceException" ist in FTPLib.dll aufgetreten.
 
Zuletzt bearbeitet:
ich vermute die Methode ftpclient.GetFiles("") schmeißt den Fehler.
Schau mal in der Hilfe ob was dazu steht.

P.S.:
Ich geh jetzt davon aus das ftpclient nicht null sein kann.
Da bei diesem ja die connect Methode aufgerufen wird und die Exception erst in der nächsten Zeile kommt (laut Bild).
 
Mh ne da steht nichts soweit ich das sehe.
Was kann man denn nun dort machen?
Kann man das ihrgendwie anders lösen?

Hatte das aus diesem Video

Und wollte das ganze als Account Datenspeicher für ein Spiel nutzen.
So das dort die daten eingetragen werden, und ich dann nach auf dem Ftp server gucken kann, und Somit die Accounts erstellen kann.

Man könnte das ganze warscheinlich gleich mit einer Datenbank verbinden ;) Aber ich wollte es erstmal so probieren.
 
Zuletzt bearbeitet von einem Moderator:
Hallo erstmal.

Also, ich würde erstmal Anfangen die Exception abzufangen:
Code:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        try
            Timer1.Start()
            ftpclient.Connect("sniffer.bplacced.net", "sniffer", "ranger")
            My.Computer.FileSystem.WriteAllText((ftpclient.GetFiles("").Length + 1).ToString, TextBox1.Text + vbNewLine + TextBox2.Text, False)
            ftpclient.UploadFile((ftpclient.GetFiles("").Length + 1).ToString(), (ftpclient.GetFiles("").Length + 1).ToString)
        catch  exc As Exception
            MessageBox.Show("Keine Dateien gefunden!\nÜberprüfe die Verbindung zum FTP-Client.")
        End Try
 
End Sub

Oder du kannst es auch so machen:
Code:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As 
        Timer1.Start()
        ftpclient.Connect("sniffer.bplacced.net", "sniffer", "ranger")
        If ftpclient.GetFiles("") <> Null Then
             My.Computer.FileSystem.WriteAllText((ftpclient.GetFiles("").Length + 1).ToString, TextBox1.Text + vbNewLine + TextBox2.Text, False)
              ftpclient.UploadFile((ftpclient.GetFiles("").Length + 1).ToString(), (ftpclient.GetFiles("").Length + 1).ToString)
        Else
              MessageBox.Show("Keine Dateien gefunden!\nÜberprüfe die Verbindung zum FTP-Client.")
        End If
 
End Sub

Bei der ersten Lösung haben wir einfach die Exception abgefangen und eine Meldung an den User ausgegeben.

Bei der zweiten Lösung kommt es erst garnicht zu der Exception, da vorher der Rückgabewert von GetFiles() kontrolliert wird. Ist dieser Null wird eine Meldung ausgegeben.

Bekommst du bei der zweiten Lösung immernoch den selben Fehler, dann solltest du den rest deine Programmes überprüfen, aber das kann ich eher ausschließen. Wie mein Vorgänger richtig meinte, ist GetFiles() der Übeltäter.

So anschließend solltest du die Verbindungszeichenfolge für deinen Server, in den Settings bereitstellen und nimm Textboxen in dein Formular auf, in welche du alles eintragen kannst, also Verbindungszeichenfolge, UserName und Passwort. Das machts einfacher ohne Neukompilation eventuelle TippFehler auszubessern.
Die Settings sorgen, dann dafür das du nicht immer alles neu Eintragen musst wenn du das Programm beendest.

Google mal am besten nach der FTP-Klasse. Sicher findest du einige informierende Beiträge in Foren und der MSDN die dir etwas genauer erklären wie die FTP-Klasse arbeitet und was man beachten muss.

SeRoth

P.S: Hoffe man merkt mir nid an das ich eigentlich kein VB machen sondern C#.
Hab aufgepasst das ich nix durcheinander werfe.
 
Zuletzt bearbeitet:
Hallo nochmal,
also ich hab mir nun die Arbeit gemacht mich nochmal mit der 3 Lib die du benutzt auseinander zu setzen.

Code:
My.Computer.FileSystem.WriteAllText((ftpclient.GetFiles("").Length + 1).ToString, TextBox1.Text + vbNewLine + TextBox2.Text, False)

Damit versuchst du alle Dateien von dem angegebenen FTP_Server runter zu laden.
Wenn es keine gibt, gibt die Funktion Null zurück.
Anschliessend schreibst du für jede Datei die GetFiles() zurückgibt eine auf deinem Computer.

Alles in allem solltest du ein wenig selbst mit der Lib rumspielen da das Video zeigt wie man ICQ Passwörter stiehlt, also eher Dateien von einem Server runterlädt

UploadFiles() müsstest du eigentlich als ersten Parameter den Pfad deiner Dateie angeben und als RemoteDir einfach den Pfad auf dem FTP Server. Das dürfte reichen.
Ungefähr so:
Code:
ftpClient.UploadFile("C:\\Hallo Welt.txt", "")

Erstell einfach mal eine Text-Datei schreib was rein und versuch sie einfach über UploadFile() auf den Server zu bekommen. Wenn das geht kannst du dir gedanken machen, wie du eine bestehende Account datei runter lädst, diese ausliest und mit den erhaltenen Informationen einen Acc erstellst.
 
Zurück