public void Runner()
{
#region 上传
string newFold = DateTime.Today.ToString("yyyy-MM-dd");
string newTempFold = @"E:\MP_Log\T6000\" + newFold;
DirectoryInfo dirInfo = new DirectoryInfo(newTempFold);
// 遍历文件夹中的所有文件
FileInfo[] files = dirInfo.GetFiles();
foreach (FileInfo fileInfo in files)
{
//Console.WriteLine(fileInfo.LastWriteTime); // 输出路径名
//Console.WriteLine(fileInfo.FullName); // 输出路径名
//Console.WriteLine(fileInfo.Name); // 输出文件名
string ip = "111.11.11.111";//IP
int port2 = 22;
string user = "testuser";
string pwd = "123";
if (fileInfo.Name.Contains("SATA_"))
{
//校验OBA和FT
if (fileInfo.Name.Contains("OBA"))
{
//上传文件
string WO = fileInfo.Name.Substring(5, 19);
string localPath = fileInfo.FullName;
string tempFold = "/upload/FT_Log/OBA/" + WO;
string remotePath = tempFold + "/" + fileInfo.Name;
using (var sftp = new SftpClient(ip, port2, user, pwd))
{
sftp.Connect();
if (!sftp.Exists(tempFold))
{
sftp.CreateDirectory(tempFold);
}
sftp.Disconnect();
}
SFTPHelper SFTPHelper = new SFTPHelper(ip, user, pwd, port);
SFTPHelper.Put(localPath, remotePath);
}
else
{
//上传文件
string WO = fileInfo.Name.Substring(5, 19);
string localPath = fileInfo.FullName;
string tempFold = "/upload/FT_Log/FT/" + WO;
string remotePath = tempFold + "/" + fileInfo.Name;
using (var sftp = new SftpClient(ip, port2, user, pwd))
{
sftp.Connect();
if (!sftp.Exists(tempFold))
{
sftp.CreateDirectory(tempFold);
}
sftp.Disconnect();
}
SFTPHelper SFTPHelper = new SFTPHelper(ip, user, pwd, port);
SFTPHelper.Put(localPath, remotePath);
}
}
else
{
string localPath = fileInfo.FullName;
string tempFold = "/upload/FT_Log/FT/Engineering Tset";
string remotePath = tempFold + "/" + fileInfo.Name;
using (var sftp = new SftpClient(ip, port2, user, pwd))
{
sftp.Connect();
if (!sftp.Exists(tempFold))
{
sftp.CreateDirectory(tempFold);
}
sftp.Disconnect();
}
SFTPHelper SFTPHelper = new SFTPHelper(ip, user, pwd, port);
SFTPHelper.Put(localPath, remotePath);
}
Console.WriteLine($"Upload {fileInfo.Name} ok");
}
#endregion
}
static List<string> GetFiles(string path, string[] patterns)
{
List<string> files = new List<string>();
foreach (var pattern in patterns)
{
foreach (var file in Directory.GetFiles(path, pattern))
{
files.Add(file);
}
}
foreach (var directory in Directory.GetDirectories(path))
{
files.AddRange(GetFiles(directory, patterns));
}
return files;
}
public class SFTPHelper
{
#region 字段或属性
private SftpClient sftp;
/// <summary>
/// SFTP连接状态
/// </summary>
public bool Connected { get { return sftp.IsConnected; } }
#endregion
#region 构造
/// <summary>
/// 构造
/// </summary>
/// <param name="ip">IP</param>
/// <param name="port">端口</param>
/// <param name="user">用户名</param>
/// <param name="pwd">密码</param>
public SFTPHelper(string ip, string user, string pwd, string port = "22")
{
sftp = new SftpClient(ip, Int32.Parse(port), user, pwd);
Connect();
}
~SFTPHelper()
{
Disconnect();
}
#endregion
#region 连接SFTP
/// <summary>
/// 连接SFTP
/// </summary>
/// <returns>true成功</returns>
public bool Connect()
{
try
{
if (!Connected)
{
sftp.Connect();
}
return true;
}
catch (Exception ex)
{
throw new Exception(string.Format("连接SFTP失败,原因:{0}", ex.Message));
}
}
#endregion
#region 断开SFTP
/// <summary>
/// 断开SFTP
/// </summary>
public void Disconnect()
{
try
{
if (sftp != null && Connected)
{
sftp.Disconnect();
}
}
catch (Exception ex)
{
throw new Exception(string.Format("断开SFTP失败,原因:{0}", ex.Message));
}
}
#endregion
#region SFTP上传文件
/// <summary>
/// SFTP上传文件
/// </summary>
/// <param name="localPath">本地文件全路径 例:G:\\Project\\logo.png</param>
/// <param name="remotePath">远程路径 例:/logo.png</param>
public bool Put(string localPath, string remotePath)
{
try
{
using (var file = File.OpenRead(localPath))
{
Connect();
sftp.UploadFile(file, remotePath);
Disconnect();
}
return true;
}
catch (Exception ex)
{
return false;
}
}
public void CreateDirectoryOnSftp(string tempFold)
{
try
{
Connect();
if (!Directory.Exists(tempFold))
{
Directory.CreateDirectory(tempFold);
}
Directory.CreateDirectory(tempFold);
Disconnect();
}
catch (Exception ex)
{
throw new Exception(string.Format("创建文件夹失败,原因:{0}", ex.Message));
}
}
#endregion
#region SFTP获取文件
/// <summary>
/// SFTP获取文件
/// </summary>
/// <param name="remotePath">远程路径</param>
/// <param name="localPath">本地路径</param>
public void Get(string remotePath, string localPath)
{
try
{
Connect();
var byt = sftp.ReadAllBytes(remotePath);
Disconnect();
File.WriteAllBytes(localPath, byt);
}
catch (Exception ex)
{
throw new Exception(string.Format("SFTP文件获取失败,原因:{0}", ex.Message));
}
}
#endregion
#region 删除SFTP文件
/// <summary>
/// 删除SFTP文件
/// </summary>
/// <param name="remoteFile">远程路径</param>
public void Delete(string remoteFile)
{
try
{
Connect();
sftp.Delete(remoteFile);
Disconnect();
}
catch (Exception ex)
{
throw new Exception(string.Format("SFTP文件删除失败,原因:{0}", ex.Message));
}
}
#endregion
//抓取文件名称
public List<string> GetFileNamesRecursively(string directoryPath)
{
List<string> fileNames = new List<string>();
try
{
// 获取当前目录的文件信息
FileInfo[] files = new DirectoryInfo(directoryPath).GetFiles();
// 遍历文件
foreach (FileInfo file in files)
{
fileNames.Add(file.Name); // 只添加文件名,不包括路径
}
// 递归遍历子目录
DirectoryInfo[] directories = new DirectoryInfo(directoryPath).GetDirectories();
foreach (DirectoryInfo dir in directories)
{
fileNames.AddRange(GetFileNamesRecursively(dir.FullName)); // 递归调用自身
}
}
catch (Exception ex)
{
Console.WriteLine("Error occurred: " + ex.Message);
}
return fileNames;
}
public string SubstringAfter(string source, string searchString)
{
int index = source.IndexOf(searchString);
if (index >= 0)
{
index += searchString.Length;
return source.Substring(index);
}
return "";
}
}
}