如何解决将字符串或列表转换为 Renci.SshNet.Sftp
我想从 SFTP 服务器(根目录和子目录)下载特定文件。我试图从 SFTP 递归获取文件和子目录的列表,但我无法做到。但使用以下代码,它仅列出文件和目录名称。我正在尝试将目录路径添加到类型为 (Renci.SshNet.Sftp.SftpFile) 的目录中,但出现以下异常。
处理此问题的任何替代方法。
using (var sftp = new SftpClient(host,22,username,password))
{
sftp.Connect();
var directory = sftp.ListDirectory("/").ToList();
string FileName = "Dir1/abc.txt,file1.txt,file2.txt"
var fileNameList = FileName.Contains(',') ? FileName.Split(',') : String.IsNullOrEmpty(FileName) ? new string[0] : new string[1] { FileName };
HashSet<string> filenameHash = new HashSet<string>(fileNameList.Select(x => x));
directory.RemoveAll(x => !filenameHash.Contains(x.Name));
directory.RemoveAll(x => (!x.IsRegularFile));
string dir = "";
SftpFile fl = (SftpFile)Convert.ChangeType(dir,typeof(SftpFile));
foreach (var f in fileNameList)
{
if (f.Contains('/'))
{
fl += f;
}
}
异常:
System.InvalidCastException: 'Invalid cast from 'System.String' to 'Renci.SshNet.Sftp.SftpFile'.'
解决方法
我只是通过连接(子目录到目录)并将其重新分配给目录来解决这个问题。
using (var sftp = new SftpClient(host,22,username,password))
{
sftp.Connect();
var directory = sftp.ListDirectory("/").ToList();
string FileName = "Dir1/abc.txt,file1.txt,file2.txt"
var fileNameList = FileName.Contains(',') ? FileName.Split(',') : String.IsNullOrEmpty(FileName) ? new string[0] : new string[1] { FileName };
HashSet<string> filenameHash = new HashSet<string>(fileNameList.Select(x => x));
directory.RemoveAll(x => !filenameHash.Contains(x.Name));
directory.RemoveAll(x => (!x.IsRegularFile));
string dir = "";
SftpFile fl = (SftpFile)Convert.ChangeType(dir,typeof(SftpFile));
foreach (var f in fileNameList)
{
if (f.Contains('/'))
{
string[] fl = f.Split("/");
var subdirectory = sftp.ListDirectory(f.Split('/')[0]).ToList();
directory = directory.Concat(subdirectory).ToList();
}
}
,
private void RecursivelyFilechecking(string Filepath,string _todaydate,string hostid,bool isHeader,string hostName,Int32 CustomerId)
{
try
{
if (_sftp.Exists(Filepath))
{
var files = _sftp.ListDirectory(Filepath);
bool flg = false;
string JobMailBody;
string toadd = string.Empty;
string fileName = string.Empty;
string fileDate = string.Empty;
Int32 filepathId = 0;
foreach (var file in files)
{
if (file.IsDirectory && !file.Name.Equals(".") && !file.Name.Equals(".."))
{
RecursivelyFilechecking(file.FullName,_todaydate,hostid,isHeader,hostName,CustomerId);
}
else if (!file.Name.Equals(".") && !file.Name.Equals(".."))
{
if (file.LastWriteTime.ToString("ddMMyyyy").Equals(_todaydate))
{
}
}
}
}
}
catch (Exception ex)
{
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。