Ergebnis von FTP Prozess? und: Prüfen ob spezieller Prozess läuft

XtremeCJ

Erfahrenes Mitglied
Ich schreibe mir gerade ein kleines Tool, um den kompletten Inhalt des aktuellen Ordners gezippt auf einen FTP zu laden. Das passiert so:
Code:
StringBuilder builder = new StringBuilder();
builder.AppendLine("open " + ftp);
builder.AppendLine(user);
builder.AppendLine(password);
builder.AppendLine("binary");
builder.AppendLine("mput \"" + zipFileName + "\"");
builder.AppendLine("close");
builder.AppendLine("bye");

File.WriteAllText(commandFileName, builder.ToString());

Process p = Process.Start("ftp.exe", "-v -i -s:" + commandFileName);
while (Process.GetProcessesByName("ftp").Length > 0) // nicht gut, es könnten ja mehrere FTP-Prozesse laufen
    Thread.Sleep(500); // wait for transaction process to end

Es wird einfach ein TXT mit den Anweisungen erstellt, der Prozess mit dem TXT als Argument gestartet, und gewartet bis der Prozess fertig ist.

Ich möchte anschließend prüfen, ob der Vorgang erfolgreich war. Gibt es eine Möglichkeit, das Ergebnis des FTP-Prozesses auszulesen?

Außerdem habe ich noch einen Kommentar an der Stelle gemacht wo ich nicht zufrieden bin. Das ist an der Stelle wo ich prüf ob der FTP-Prozess noch läuft. Wenn zufällig nebenher noch ein anderer FTP-Prozess läuft, wird das hier nicht so schnell fertig. Gibt es eine Möglichkeit zu prüfen, ob der spezielle Prozess p abgeschlossen ist?
 
Zuletzt bearbeitet:
Lösung:

Über ein ProcessStartInfo kann die Rückgbae eines solchen Prozesses ausgelesen werden. Mit Prozess.StandardOutput.ReadToEnd wird dieses Ergebnis ausgelesen, nachdem im zugehörigen ProcessStartInfo das Flag "RedirectStandardOutput" auf "true" gesetzt wurde.

In meinem Fall sieht es jetzt so aus:
Code:
ProcessStartInfo processStartInfo = new ProcessStartInfo("ftp", "-v -i -s:" + commandFileName);
processStartInfo.RedirectStandardOutput = true;
processStartInfo.CreateNoWindow = true;
processStartInfo.UseShellExecute = false;
Process p = new Process();
p.StartInfo = processStartInfo;
p.Start();
string result = p.StandardOutput.ReadToEnd();

Thema erledigt :) sollte jemand von euch einen Simon Widmaier kennen, dann huldigt ihm ;D er is wie google auf 2 Beinen, nur findet man da schneller bessere Lösungen 8D
 

Neue Beiträge

Zurück