156 lines
4.0 KiB
C#
156 lines
4.0 KiB
C#
using Renci.SshNet;
|
|
using System;
|
|
using File = System.IO.File;
|
|
|
|
namespace JWH.NETWORK
|
|
{
|
|
public static class StpClientWrap
|
|
{
|
|
private static SftpClient _sftpClient;
|
|
private static string _host;
|
|
private static int _port = 22;
|
|
private static string _userId;
|
|
private static string _password;
|
|
|
|
public static void Initialize(string host, string userId, string password, int port = 22)
|
|
{
|
|
_host = host;
|
|
_userId = userId;
|
|
_password = password;
|
|
_port = port;
|
|
_sftpClient = new SftpClient(_host, _port, _userId, _password);
|
|
}
|
|
|
|
public static void Connect()
|
|
{
|
|
if (_sftpClient == null)
|
|
{
|
|
throw new InvalidOperationException("SFTP client is not initialized. Call Initialize() first.");
|
|
}
|
|
|
|
if (!_sftpClient.IsConnected)
|
|
{
|
|
_sftpClient.Connect();
|
|
}
|
|
}
|
|
|
|
public static void Disconnect()
|
|
{
|
|
if (_sftpClient != null && _sftpClient.IsConnected)
|
|
{
|
|
_sftpClient.Disconnect();
|
|
}
|
|
}
|
|
|
|
public static bool IsDirExists(string path)
|
|
{
|
|
return IsFileExists(path) && _sftpClient.GetAttributes(path).IsDirectory;
|
|
}
|
|
|
|
|
|
public static bool IsFileExists(string path)
|
|
{
|
|
try
|
|
{
|
|
Connect();
|
|
return _sftpClient.Exists(path);
|
|
}
|
|
catch
|
|
{
|
|
return false;
|
|
}
|
|
finally
|
|
{
|
|
Disconnect();
|
|
}
|
|
}
|
|
|
|
public static Renci.SshNet.Sftp.SftpFileAttributes GetFileInfo(string remoteFilePath)
|
|
{
|
|
try
|
|
{
|
|
Connect();
|
|
if (_sftpClient.Exists(remoteFilePath))
|
|
{
|
|
return _sftpClient.GetAttributes(remoteFilePath);
|
|
}
|
|
else
|
|
{
|
|
Console.WriteLine("파일이 존재하지 않습니다.");
|
|
return null;
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Console.WriteLine($"파일 정보 조회 오류: {ex.Message}");
|
|
return null;
|
|
}
|
|
finally
|
|
{
|
|
Disconnect();
|
|
}
|
|
}
|
|
|
|
public static object GetSftpList(string path)
|
|
{
|
|
try
|
|
{
|
|
Connect();
|
|
return _sftpClient.ListDirectory(path);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
throw ex;
|
|
}
|
|
finally
|
|
{
|
|
Disconnect();
|
|
}
|
|
}
|
|
|
|
public static bool DownloadSftpFile(string remotePath, string localPath)
|
|
{
|
|
try
|
|
{
|
|
Connect();
|
|
using (var fileStream = File.OpenWrite(localPath))
|
|
{
|
|
_sftpClient.DownloadFile(remotePath, fileStream);
|
|
}
|
|
return true;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Console.WriteLine($"Download error: {ex.Message}");
|
|
return false;
|
|
}
|
|
finally
|
|
{
|
|
Disconnect();
|
|
}
|
|
}
|
|
|
|
public static bool UploadSftpFile(string localPath, string remotePath)
|
|
{
|
|
try
|
|
{
|
|
Connect();
|
|
using (var fileStream = File.OpenRead(localPath))
|
|
{
|
|
_sftpClient.UploadFile(fileStream, remotePath);
|
|
}
|
|
return true;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Console.WriteLine($"Upload error: {ex.Message}");
|
|
return false;
|
|
}
|
|
finally
|
|
{
|
|
Disconnect();
|
|
}
|
|
}
|
|
}
|
|
}
|