Bearbeitung einer Textdatei auf einem FTP Server mithilfe von VB

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 18 Antworten in diesem Thema. Der letzte Beitrag () ist von Trade.

    Bearbeitung einer Textdatei auf einem FTP Server mithilfe von VB

    Hallöchen allerseits :)

    Ich bin neu hier und hoffe das ich im richtigen Bereich gelandet bin.

    Seit Stunden verzweifle ich daran ein Programm mithilfe von VB zu erstellen die eine einfache Datei auf einem FTP Server (Textdukument) bearbeitet, sprich den Inhalt überschreibt.

    Kleines Beispiel: Im Server gibt es die Datei namens "XYZ" mit dem Inhalt "Ich mag Brot", diesen Inhalt möchte ich nun mithilfe von einer Textbox und einem Button etc. in "Ich mag Käse" bearbeiten.


    Habe schon viel gelesen das mal die Datei erst Down und dan Uploaden soll aber irgentwie klappt hier nichts.


    Das hier habe ich schon versucht:
    (Im erhoffen das ich die Textdatei überschreiben könnte, leider nicht gelungen - genau so wenig wie alle anderen Hilfestellungen)

    VB.NET-Quellcode

    1. My.Computer.Network.UploadFile(TextBox1.Text , "ftp://Mein FTP Server.com/Text.txt", "Mein Benutzername", "Mein Passwort ")



    WICHTIG: Ich möchte die Datei am besten auf dem Server bearbeiten sprich ohne Down und Upload, wenn dieses jedoch garnicht gehen wird setze ich auf Methode 2 auch noch Zeit und Gedult :)


    Hoffe das mit jemand endlich helfen kann :)

    P.s: Für die die bisschen mehr Zeit haben hätte ich noch ne Aufgabe. Ebenfalls versuche ich mir vom FTP server ein Bild ohne download in der PictureBox anzeigen zu lassen, ist es plaussible und wenn ja wie ?

    Hab es mal mit

    VB.NET-Quellcode

    1. PictureBox1.Load("ftp://MEINFTPSERVER.net/XYZ.jpg")


    Probiert aber dan kommt die Fehlermeldung das ich nicht im FTP Server angemeldet bin bzw. das Programm aufgrund der fehlenden Anmeldung keinen Zugriff hat.


    Gruß!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „D3T3Kt0“ ()

    Naja, wenn das nicht geht, dann musst Du mit System.IO mit nem FileStream oder nur File.Create in nem Using-Block eine Datei erstellen, in die das neue schreiben mit System.IO.File.WriteAllText, dann einen FtpWebRequest erstellen und optional einen WebClient für den Upload nutzen, dann mit diesem Request erst die alte Datei löschen und dann die neue hochladen, was mit nem FtpWebRequest oder eben dem WebClient funktioniert.

    Schreibe Dein Passwort btw NIE so direkt in den Code, falls das der Fall ist., sondern beziehe das aus ner Eingabe. Generell ist dann auch die Frage, willst Du, dass mehrere Leute das nutzen? Wenn ja, saugefährlich: denn auf den EIGENEN FTP was hochzuladen, wo dann jeder was machen kann.... puh, außerdem kennt dann ja jeder Dein Passwort.
    Und wenn da kommt, dass Du keine Rechte hast, weil Du nicht angemeldet bist, dann musste Dich halt anmelden?
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Willkommen im Forum. :thumbup:

    D3T3Kt0 schrieb:

    Ich möchte die Datei am besten auf dem Server bearbeiten sprich ohne Down und Upload
    Geht nicht, da müsstest Du ja einen Editor auf dem Server fernsteuern, das ist nicht Sinn des Servers.
    Also:
    Runterladen
    Bearbeiten
    Hochladen
    Feddich.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @RodFromGermany Afaik muss man's auch löschen, sonst droht ne 550er Response.
    Und zum Zweiten: Jo, stimmt, was willst Du von nem FTP-Protokoll da ziehen? HTTP ist das standardmäßige Protokoll, das benutzt wird, auch wenn Du jetzt im Netz die Datei anschauen würdest. Folglich musst Du die URL halt dann rausfinden auf Deinem Server und dann angeben.
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:

    Trade schrieb:

    was willst Du von nem FTP-Protokoll da ziehen?
    Die Buchstabenfolge "FTP" kommt in meinem Post nicht vor. ;)
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Trade schrieb:

    Naja, wenn das nicht geht, dann musst Du mit System.IO mit nem FileStream oder nur File.Create in nem Using-Block eine Datei erstellen, in die das neue schreiben mit System.IO.File.WriteAllText, dann einen FtpWebRequest erstellen und optional einen WebClient für den Upload nutzen, dann mit diesem Request erst die alte Datei löschen und dann die neue hochladen, was mit nem FtpWebRequest oder eben dem WebClient funktioniert.

    Schreibe Dein Passwort btw NIE so direkt in den Code, falls das der Fall ist., sondern beziehe das aus ner Eingabe. Generell ist dann auch die Frage, willst Du, dass mehrere Leute das nutzen? Wenn ja, saugefährlich: denn auf den EIGENEN FTP was hochzuladen, wo dann jeder was machen kann.... puh, außerdem kennt dann ja jeder Dein Passwort.
    Und wenn da kommt, dass Du keine Rechte hast, weil Du nicht angemeldet bist, dann musste Dich halt anmelden?


    Okay nach der Mitte konnte ich nciht mehr hoch konzentriert Folgen, den Entschluss den ich aber hoffentlich richtig verstanden ist, ist der das ich die Datei runterladen muss, dan löschen vom FTP server, und dan wieder hochladen. Aber nun wie bearbeite ich den die heruntergeladene datei ? Ich will ja möglichst nicht die Datei auf meinem PC unter einem Pfad abspeichern. Kann ich die Datei ohne Pfadangebe runterladen, bearbeiten und dan wieder hochladen ?


    Dancger schrieb:

    Willkommen :)

    Zur zweiten Frage:
    Versuchs mal mit "http://..." anstatt "ftp://..." ;)

    Grüsse


    Ach mensch manchmal ist es so einfach.... :D
    Danke, hat mir geholfen!
    @RodFromGermany Auf Dich bezog sich nur der erste Satz ;)
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:

    ErfinderDesRades schrieb:

    D3T3Kt0 schrieb:

    also so wie es ausschaut muss ich es wohl doch downloaden, löschen und dan wieder uploaden
    ja, das hat ja auch wohl jeder Antworter hier im Thread gesagt.
    Was bedeutet "FTP": File-Transfer-Protocol. Transfer, nicht Modify.


    Ja hast recht. Das Ding ist das ich momentan ein Programm schreiben will was einen Befehl ausführ sobalt eine Textdatei den richtigen text enthält.

    spricht mit Programm1 schreibe ich in die Textdatei "MsgBox("Hallo Na du")"

    Und Programm 2 kontrolliert mit einem Timer den Inhalt der Datei und sobal der Text in der Textdatei übereinstimmt führt er den Befehl aus.

    sprich:

    VB.NET-Quellcode

    1. If Text auf FTP Server = "Hallo Na Du" Then
    2. MsgBox("Hallo Na Du")


    Verstehst du was ich erreichen will ?
    Oha. In einem Timer... Warum das denn? Das ist unperformant. WebClient.DownloadString und gut ist's! Wenn Du Code compilen willst, gugge mal CodeDom.

    Mir scheint auch, als würdest Du Microsoft.VisualBasic nutzen -> Aus MsgBox wird MessageBox.Show.

    Und: In VB.NET gibt es keine Befehle!
    Was man aber sagen muss, ist, dass das auch ziemlich gefährlich sein kann. Jetzt stelle Dir vor Dein Webspace wird gekapert und jemand schreibt in die Datei nen Code, der Schaden anrichten kann iwie.
    Du führst das aus und dann war's das!
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    jepp - eigentlich müsste man hier zumachen. Weil dieser Ansatz ist sowas von unsicher, und FTP-Chat-Threads werden ja auch immer geschlossen, und im Grunde ist dieses Remoting-Teil auch nix anneres als ein Ftp-Chat.
    (Genauer: Ein Chat ist eine auf menschliche Kommunikation ausgerichtete Remoting-Anwendung, meist sogar erweitert um Datei-Übertragungs-Funktionalität.)
    Lese und Schreibrechte des Servers beachten !


    Spoiler anzeigen

    VB.NET-Quellcode

    1. Option Strict On
    2. Imports System.Net
    3. Public Class Form1
    4. Dim TXT_Datei_Adresse As String = "ftp://Benutzername:Pass@IP.xx.xxx.xx/ST310005-20AS-01/FRITZ/mediabox/Video_Streams/ZZ_Was_gibt_es_neues_Info_Datei.txt"
    5. Dim Text_DownloadString_Client, Text_UploadString_Client As New Net.WebClient
    6. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    7. TopMost = True
    8. 'Kontextmenü-RichTextBox1
    9. RichTextBox1.AddContextMenu()
    10. End Sub
    11. 'Lesen
    12. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    13. If Text_DownloadString_Client.IsBusy = False Then
    14. Using Text_DownloadString_Client As New Net.WebClient
    15. Try
    16. Text_DownloadString_Client.DownloadStringAsync(New Uri(TXT_Datei_Adresse))
    17. AddHandler Text_DownloadString_Client.DownloadStringCompleted, AddressOf DownloadString_Client_DownloadCompleted
    18. Catch ex As Exception
    19. MsgBox(ex.Message.ToString)
    20. End Try
    21. End Using
    22. End If
    23. End Sub
    24. Private Sub DownloadString_Client_DownloadCompleted(sender As Object, e As DownloadStringCompletedEventArgs)
    25. If e.Error IsNot Nothing Then
    26. RichTextBox1.Text = e.Error.Message
    27. Else
    28. RichTextBox1.Text = e.Result()
    29. End If
    30. End Sub
    31. 'Zurück Schreiben
    32. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    33. If Text_UploadString_Client.IsBusy = False Then
    34. Using Text_UploadString_Client As New Net.WebClient
    35. Try
    36. Text_UploadString_Client.UploadStringAsync(New Uri(TXT_Datei_Adresse), RichTextBox1.Text)
    37. AddHandler Text_UploadString_Client.UploadStringCompleted, AddressOf Text_UploadString_Client_UploadStringCompleted
    38. Catch ex As Exception
    39. MsgBox(ex.Message.ToString)
    40. End Try
    41. End Using
    42. End If
    43. End Sub
    44. Private Sub Text_UploadString_Client_UploadStringCompleted(sender As Object, e As UploadStringCompletedEventArgs)
    45. 'xxxxxx
    46. End Sub
    47. End Class
    48. 'Kontextmenü-RichTextBox1
    49. Module Module1
    50. <System.Runtime.CompilerServices.Extension()> _
    51. Public Sub AddContextMenu(ByVal rtb As RichTextBox)
    52. Dim oMenu As New ContextMenuStrip
    53. AddHandler oMenu.Opening, AddressOf ContextMenuOpening
    54. oMenu.Items.Add("Rückgängig").Tag = "Undo"
    55. oMenu.Items.Add("-")
    56. oMenu.Items.Add("Ausschneiden").Tag = "Cut"
    57. oMenu.Items.Add("Kopieren").Tag = "Copy"
    58. oMenu.Items.Add("Einfügen").Tag = "Paste"
    59. oMenu.Items.Add("Löschen").Tag = "Del"
    60. AddHandler oMenu.ItemClicked, AddressOf ContextMenuItemClicked
    61. rtb.ContextMenuStrip = oMenu
    62. End Sub
    63. Private Sub ContextMenuOpening(ByVal sender As Object, _
    64. ByVal e As System.ComponentModel.CancelEventArgs)
    65. Dim oMenu As ContextMenuStrip = CType(sender, ContextMenuStrip)
    66. Dim rtb As RichTextBox = CType(oMenu.SourceControl, RichTextBox)
    67. oMenu.Items(0).Enabled = rtb.CanUndo
    68. oMenu.Items(2).Enabled = (rtb.SelectionLength > 0)
    69. oMenu.Items(3).Enabled = (rtb.SelectionLength > 0)
    70. oMenu.Items(4).Enabled = (Clipboard.ContainsText())
    71. oMenu.Items(5).Enabled = (rtb.SelectionLength > 0)
    72. End Sub
    73. Private Sub ContextMenuItemClicked(ByVal sender As Object, _
    74. ByVal e As System.Windows.Forms.ToolStripItemClickedEventArgs)
    75. Dim rtb As RichTextBox = CType(CType(sender, ContextMenuStrip).SourceControl, RichTextBox)
    76. Select Case e.ClickedItem.Tag.ToString
    77. Case "Undo"
    78. rtb.Undo()
    79. Case "Cut"
    80. rtb.Cut()
    81. Case "Copy"
    82. rtb.Copy()
    83. Case "Paste"
    84. rtb.Paste()
    85. Case "Del"
    86. rtb.SelectedText = ""
    87. End Select
    88. End Sub
    89. End Module

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „TVX“ ()

    Trade schrieb:

    Oha. In einem Timer... Warum das denn? Das ist unperformant. WebClient.DownloadString und gut ist's! Wenn Du Code compilen willst, gugge mal CodeDom.

    Mir scheint auch, als würdest Du Microsoft.VisualBasic nutzen -> Aus MsgBox wird MessageBox.Show.

    Und: In VB.NET gibt es keine Befehle!
    Was man aber sagen muss, ist, dass das auch ziemlich gefährlich sein kann. Jetzt stelle Dir vor Dein Webspace wird gekapert und jemand schreibt in die Datei nen Code, der Schaden anrichten kann iwie.
    Du führst das aus und dann war's das!


    Du hast mcih falsch verstanden bzw. hab ich es bisschen kompliziert erklärt. Der befehl ist schon festgesetzt es soll nur ein bestimmtes wort in die textdatei geschreiben werden um es auszuführen. Ich meine wenn jemand mein webspace kapert wird es nicht viel bringen weil ich da kaum was drauf habe und das programm was ich ja schreiben will nicht 24/7 "online" ist :)

    Ja schreibe es mir Visual Studio

    ErfinderDesRades schrieb:

    jepp - eigentlich müsste man hier zumachen. Weil dieser Ansatz ist sowas von unsicher, und FTP-Chat-Threads werden ja auch immer geschlossen, und im Grunde ist dieses Remoting-Teil auch nix anneres als ein Ftp-Chat.
    (Genauer: Ein Chat ist eine auf menschliche Kommunikation ausgerichtete Remoting-Anwendung, meist sogar erweitert um Datei-Übertragungs-Funktionalität.)


    Ich will das ja nicht machen um es dan 4000 Leuten zu schicken da wäre das natülich vollkommen nachvollziehbar mit der unsicherheit ich will mich provat nur in meinem Wissen erweitern :)

    Aber den Thread kannst du gerne schließen hab ne Methode gefunden um mir recht zu werden :) Aber danke noch mal an alle !
    Ich habe es verstanden, Du aber nicht. Lies Dir meinen Beitrag nochmal durch.
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Na lass ihn doch , kann keiner sagen das er auf den richtigen Umgang nicht hingewiesen wurde !
    Steht wohl ausser Frage das man das nur für sich und seine 3 besten Freunde nutzen sollte ...

    Ich nutz meinen nur Für FritzNas Media Server mit begrenztem Benutzer Konto + vpn und das auch nur
    für mich und den besten Freund !



    Bild Laden:

    'Achte auf die schreibweisse für Benutzer + Pass (( "ftp://Benutzername:Pass@IP.xx.xxx.xx/ST310005-20AS-01/FRITZ/mediabox/Video_Streams/ZZ_Was_gibt_es_neues_Info_Datei.txt" ))
    'und nicht ( Komma , Komma )

    Spoiler anzeigen

    VB.NET-Quellcode

    1. PictureBox1.LoadAsync(Pfad)


    Oder schau dir das an: (( FTP Credentials ))
    FTP Tutorial Uploaden und downloaden

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „TVX“ ()

    Öh wat. Ist ja nicht so, als könnten trotzdem unbekannte Personen den FTP kapern. Oo
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!: