Umformatierung einer Datei durch FTP-Upload!?

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Fabi2011.

    Umformatierung einer Datei durch FTP-Upload!?

    Hallo Community!

    Ich bin Programmieranfänger. Für die Firma müssen ab und zu Kleinigkeiten gemacht werden und so bin ich dann irgendwann in die VBS und VB.NET Welt reingetrampelt.
    Also versuche ich mich da so gut es geht, basierend auf Projekten und Problemstellungen, in dieser Welt zu orientieren. Jetzt bin ich aber auf ein Problem gestoén, welches ich a) nicht behoben bekomme und b) absolut nicht verstehe.

    An dieser Stelle erstmal kurz zum Tool das ich gebaut habe:
    - Es werden XML-Dateien abgeändert. Teilweise Sachen raus. Teils welche rein. - Funktioniert.
    - Es werden Kopien in BackupOrdner gelegt. Zum einen von der Ursprungsdatei und zum anderen von der fertigen Datei. - Funktioniert.
    - Die fertigen Dateien werden dann über ein "call Ftpupload" auf einen Server hochgeladen. - Funktioniert.

    Wo ist mein Problem?
    - Jetzt öffnete ich eine der Dateien die auf dem FTP-Server lag mit Notepad++ und stellte fest, dass zwischen jeder Zeile in der XML-Datei eine Leerzeile ist.
    - Ich öffnete die selbe Datei im normalen Editor: Keine Leerzeile
    - Ich öffnete das Backup der Datei (welches vor dem FTP-Upload erzeugt wurde) mit Notepad++ und dem normalen Editor: Keine Leerzeile
    - Ich habe das backup auf den FTP (per FileZilla) hochgeladen und anschließend geöffnet: Keine Leerzeile

    --> Immer wenn ich über die Anwendung die ich geschrieben habe einen Upload mache und die Datei runterlade sieht man im Notepad++ also eine Leerzeile zwischen jeder Zeile. Im Editor sieht man die nicht.
    --> Vor dem FTP-Uplaod aus der Anwendung heraus ist alles ok.
    --> Wenn ich per FileZilla uploade ist auch alles ok.

    Nur ich verändere zu diesem Zeitpunkt eigentlich nichts mehr an der Datei...!? -Ich bin ratlos.

    Die MainSub (Auszug vom Ende) ruft die Sub "Ftpupload" auf, welche auch das Ende der Programmierung darstellt.

    Quellcode

    1. Next
    2. logFile.WriteLine((Now) & ";Main;" & strDateiname & ";OK")
    3. Call Ftpupload()
    4. logFile.WriteLine((Now) & ";Main;" & strDateiname & ";Fehler")
    5. End Sub


    Der FTP-Upload sieht wie folgt aus (ftp selbst klappt ja auch):

    Quellcode

    1. Sub Ftpupload()
    2. Dim strDatumSyntax = strJahr & strMonat & strTag
    3. Dim di As DirectoryInfo = New DirectoryInfo(outputordner)
    4. For Each fi In di.GetFiles(strDatumSyntax & "*.xml", SearchOption.TopDirectoryOnly)
    5. strDateiname = fi.Name
    6. Try
    7. Dim client As WebClient = New WebClient
    8. client.Credentials = New NetworkCredential("TESTUSER", "TESTPASSWORT")
    9. client.UploadFile("ftp://ftp.test-test.de/xml/" & My.Computer.FileSystem.GetName(strDateiname), outputordner & strDateiname)
    10. My.Computer.FileSystem.CopyFile(outputordner & strDateiname, backupordner & My.Computer.FileSystem.GetName(strDateiname), True)
    11. My.Computer.FileSystem.CopyFile(outputordner & strDateiname, exportordner & My.Computer.FileSystem.GetName(strDateiname), True)
    12. My.Computer.FileSystem.DeleteFile(outputordner & strDateiname)
    13. logFile.WriteLine((Now) & ";FTP-Upload;" & outputordner & strDateiname & ";OK")
    14. Catch ex As Exception
    15. logFile.WriteLine((Now) & ";FTP-Upload;" & outputordner & strDateiname & ";Fehler")
    16. My.Computer.FileSystem.CopyFile(outputordner & strDateiname, backupordner & My.Computer.FileSystem.GetName(strDateiname), True)
    17. My.Computer.FileSystem.CopyFile(outputordner & strDateiname, exportordner & "failed\" & My.Computer.FileSystem.GetName(strDateiname), True)
    18. My.Computer.FileSystem.DeleteFile(outputordner & strDateiname)
    19. End Try
    20. Next
    21. End Sub


    Hat jemand irgendeine Ahnung woran das liegt!? :/

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

    Die Unsicherheit von FTP und Klartextpasswörtern im Code sollte dir klar sein?
    Nun zum eigentlichen Punkt, wie schreibst du denn die .XML Datei? :)

    Desweiteren ist ein CALL vor einer Methode in VB.NET nicht nötig.
    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


    Hallo und vielen Dank für deine Antwort!
    Ja das mit den Klartextpasswörtern ist mir bekannt. In weiteren Versionen werde ich das noch ändern. Bisher fehlt/fehlten mir aber die entsprechende Kenntnisse das besser zu machen. Da es sich um ein geschlossenes System handelt auf das nur 1 Person Zugriff hat und die Anwendung auch nirgends sonst eingestezt wird ist es aber erstmal ok das so zu machen bis ich es besser "kann".

    Die XML wird von einer Automatensoftware (ursprünglich) erstellt. Anschließend nehme ich Änderungen dran vor. Beispielsweise durch. In der Regel sind das einfache "replace" Funktionen.

    Beispiel:

    Quellcode

    1. strNewTextb = Replace(strNewTextb, "<?xml version=""1.0"" encoding=""utf-8""?>", "<?xml version=""1.0""?>")


    Davon sind dann einige im Code drin. Außerdem werden noch manche Zeilen gelöscht. Bzw. eine Datei neu geschrieben.

    Quellcode

    1. Dim varResultDatei = strOutputDatei
    2. Const ForReading = 1
    3. Const ForWriting = 2
    4. Dim fin = MyFiles.OpenTextFile(varTmpDatei, ForReading)
    5. Dim fout = MyFiles.OpenTextFile(varResultDatei, ForWriting, True)
    6. Dim strSearch As String = "ReportData"
    7. Do While CBool(Not fin.AtEndOfStream)
    8. Dim strline = CStr(fin.readLine())
    9. If InStr(strline, strSearch) = 0 Then
    10. fout.writeline(strline)
    11. End If
    12. Loop
    13. fin.close
    14. fout.close


    Am Ende kommt auch eine korrekte Datei raus. Erst nach dem FTPUpload und anschließendem Download der Datei kann ich das Problem feststellen.
    Inzwischen habe ich noch etwas getestet und ggf. liegt es auch gar nicht an der Anwendung selbst.... :-/

    Ich habe die Anwendung durchlaufen lassen. Die Dateien wurden hochgeladen.
    Die Dateien lokal habe ich mir angesehen. Im Editor als auch im Notepad++ sind die Dateien ok.
    Dann download der Dateien vom FTP: Hier ist dann im Notepad++ nach jeder Zeile eine Leerzeile.
    Diese gedownloadeten Dateien habe ich jetzt nochmal per FileZilla hochgeladen und wieder runtergeladen.... Resultat: Die Leerzeilen sind weg.

    Keine Ahnung woran das liegt. Aber wenn es hier falsch ist (was ich vermute) ... tut es mir Leid das hier fälschlicherweise gepostet zu haben. -.-
    Ich blicke zwar nicht wirklich durch, was jetzt wie wo was bei dir auslöst, aber der WebClient hat einen Property die sich UseBinary nennt, die könntest du mal auf true setzten.
    Zusätzlich möchte ich noch anmerken, das jeder XML parser Leerzeilen eigentlich ignoriert, die sind nicht relevant für die Daten.

    Edit: Meh, sorry vergiss die erste Zeilen, hab den Artikel nicht komplett gelesen, die Property ist in der FtpWebRequest Klasse: