2016-07-20 8 views
1

Ich muss FTP eine lokale Datei an Mainframe und haben das folgende Skript geschrieben, um eine lokale Batch-Textdatei mit Streamwriter erstellen und verwenden Sie diese Datei mit dem FTP -s: Befehl zum Ausführen.VB FTP-Code funktioniert in Debug (F10) aber nicht beim Ausführen oder F5

Hier ist der Code.

Shared Sub TestFTP() 

    ' BP DEFINED INPUTS ANDF OUTPUTS 

    'Inputs 
    Dim hostname As String 
    Dim username As String 
    Dim password As String 
    Dim mainfile As String 
    Dim localfile As String 

    'Outputs 
    Dim success As Boolean 
    Dim message As String 

    '------------- 
    'Test DATA 
    '------------- 

    hostname = "XXIBM2" 
    username = "USER1" 
    password = "XXX1234" 
    mainfile = "XXTSO.USER1.TEST2" 
    localfile = "D:\TestFTP.txt" 

    '=============================BP Code======================== 
    Try 
     Dim localPath As String = "C:\BPFTP" 
     Dim isExists As Boolean = System.IO.Directory.Exists(localPath) 

     If (isExists = False) Then 
      System.IO.Directory.CreateDirectory(localPath) 
     End If 

     ' Open StreamWriter And create batch file 

     Using writer As StreamWriter = New StreamWriter(localPath + "\\FTP.txt") 

      writer.WriteLine("open " + hostname) 
      writer.WriteLine(username) 
      writer.WriteLine(password) 
      writer.WriteLine("put " + localfile + " '" + mainfile + "'") 
      writer.WriteLine("bye") 
      writer.WriteLine("exit") 
     End Using 

     ' Perform FTP 

     Interaction.Shell("ftp -n -s:C:\BPFTP\FTP.txt") 

     ' Delete batch file 

     System.IO.File.Delete("C:\\BPFTP\\FTP.txt") 
     success = True 

    Catch e As Exception 

     success = False 
     message = e.Message 

    End Try 


End Sub 

Wenn ich den Code mit F5 ausführen, wird die Datei nicht auf dem Mainframe angezeigt.

Wenn ich einen Breakpoing bei Shell-Befehl festlegen und den Code (f5) hier und dann F5 bis zum Ende ausführen, wird die Datei nicht FTPd an den Mainframe.

JEDOCH.

Wenn ich den Code auf den Haltepunkt ausführen und dann einfach die Shell-Befehlszeile mit F10 "übergehen", dann wird die Datei FTP erfolgreich auf dem Mainframe.

+0

Nicht sicher, was Sie meinen, aber ich habe Administratorrechte. Jimmy Smith lieferte eine Lösung für das Problem unten. – RobT

Antwort

3

Wenn Sie im Debug-Modus ausführen, erzwingen Sie eine synchrone Operation, müssen Sie Shell und Ihre FTP-Anwendung zu warten, um die Datei vollständig zu senden.

Interaction.Shell("ftp -n -s:C:\BPFTP\FTP.txt", AppWinStyle.MinimizedFocus, True, 30000) 

See here

Dies wird es zwingen, 30 Sekunden zu warten, bevor Sie fortfahren, wenn Sie es setzen es wartet immer auf -1, was ein unerwünschtes Verhalten verursachen kann.

+0

Danke Jimmy. Abgesehen davon ist das Timeout in Millisekunden und nicht in Sekunden, also musste ich das auf 1000 ändern, um mir 1 Sekunde zu geben. Es hat dann gut funktioniert. – RobT

+1

können Sie bitte Ihre Antwort bearbeiten. Danke – RobT

+0

Korrigierte meine Antwort. Ihr Problem war ein heikles Thema, das ich selbst mit anderen Prozessen hatte, die ich hüllen musste. –