git_bsmd/nsw/Source/bsmd.dakosy/sftp.cs

91 lines
3.3 KiB
C#

//
// Class: sftp
// Current CLR: 4.0.30319.34209
// System: Microsoft Visual Studio 10.0
// Author: dani
// Created: 4/28/2015 8:53:41 AM
//
// Copyright (c) 2015 Informatikbüro Daniel Schick. All rights reserved.
using System;
using System.Diagnostics;
using System.Xml;
using System.Xml.XPath;
using System.Collections.Generic;
namespace bsmd.dakosy
{
/// <summary>
/// Hilfsklasse zur Kommunikation via SFTP. Wir machen es uns hier leicht und verwenden das beliebte WINSCP im
/// Process-Modus. (http://winscp.net/eng/docs/guide_dotnet)
/// </summary>
public static class sftp
{
public static void Put(string fullPath)
{
Process winscp = new Process();
winscp.StartInfo.FileName = Properties.Settings.Default.WINSCPFullPath;
winscp.StartInfo.Arguments = "/xmllog=\"" + Properties.Settings.Default.SFTPLog + "\"";
winscp.StartInfo.UseShellExecute = false;
winscp.StartInfo.RedirectStandardInput = true;
winscp.StartInfo.RedirectStandardOutput = true;
winscp.StartInfo.CreateNoWindow = true;
winscp.Start();
// Feed in the scripting commands
winscp.StandardInput.WriteLine("option batch abort");
winscp.StandardInput.WriteLine("option confirm off");
winscp.StandardInput.WriteLine("open " + Properties.Settings.Default.SFTPSessionName);
winscp.StandardInput.WriteLine("ls");
winscp.StandardInput.WriteLine("put " + fullPath);
winscp.StandardInput.Close();
// Collect all output (not used in this example)
string output = winscp.StandardOutput.ReadToEnd();
// Wait until WinSCP finishes
winscp.WaitForExit();
/*
// Parse and interpret the XML log
// (Note that in case of fatal failure the log file may not exist at all)
XPathDocument log = new XPathDocument(Properties.Settings.Default.SFTPLog);
XmlNamespaceManager ns = new XmlNamespaceManager(new NameTable());
ns.AddNamespace("w", @"http://winscp.net/schema/session/1.0");
XPathNavigator nav = log.CreateNavigator();
// Success (0) or error?
if (winscp.ExitCode != 0)
{
Console.WriteLine("Error occured");
// See if there are any messages associated with the error
foreach (XPathNavigator message in nav.Select("//w:message", ns))
{
Console.WriteLine(message.Value);
}
}
else
{
// It can be worth looking for directory listing even in case of
// error as possibly only upload may fail
XPathNodeIterator files = nav.Select("//w:file", ns);
Console.WriteLine(string.Format("There are {0} files and subdirectories:", files.Count));
foreach (XPathNavigator file in files)
{
Console.WriteLine(file.SelectSingleNode("w:filename/@value", ns).Value);
}
}
*/
}
public static void GetAll(string fullPath)
{
}
}
}