簡體   English   中英

c# (WinSCP) 顯示 sftp 目錄結構與 c# 中的 treeview

[英]c# (WinSCP) showing sftp directory structure with treeview in c#

我正在嘗試實現以下目標,構建一個 treeview 組件,使用 winscp api 顯示 ftp 文件夾的所有目錄和子目錄。

像這樣:

Home ---->SubFolder
     |
     |---->Another Folder -------> MyFolder1
     |                  | -------> MyFolder2
     |
     |---->MyOtherFolder 

我正在遵循這種方法,但不知何故對於 winscp directoryInfo 它不起作用。

private void ListDirectory(TreeView treeView, string path)
{
    treeView.Nodes.Clear();
    var rootDirectoryInfo = new DirectoryInfo(path);
    treeView.Nodes.Add(CreateDirectoryNode(rootDirectoryInfo));
}

private static TreeNode CreateDirectoryNode(DirectoryInfo directoryInfo)
{
    var directoryNode = new TreeNode(directoryInfo.Name);
    foreach (var directory in directoryInfo.GetDirectories())
        directoryNode.Nodes.Add(CreateDirectoryNode(directory));
    foreach (var file in directoryInfo.GetFiles())
        directoryNode.Nodes.Add(new TreeNode(file.Name));
    return directoryNode;
}

當我使用 winscp.RemoteDirectoryInfo 而不是 directoryInfo 遵循這種方法時,它不起作用,因為 RemoteDirectoryInfo 沒有與 IO.DirectoryInfo 相同的屬性和方法。

我看到 go 的更好方法可能是使用 enumerateDirectories,它將顯示所有文件夾和子文件夾。

var fileInfos =  sftpSession.EnumerateRemoteFiles("/source", "*", WinSCP.EnumerationOptions.AllDirectories | WinSCP.EnumerationOptions.EnumerateDirectories);           
            foreach (RemoteFileInfo fi in fileInfos)
            {
                if (fi.IsDirectory) { 
                treeView1.Nodes.Add(fi.FullName);
                }
            }

但這會導致:

文件夾樹

我試圖實現這一目標的地方:

文件夾樹

使用WinSCP Session.ListDirectory獲取子目錄和文件列表以及特定文件夾(而不是代碼中的DirectoryInfo.GetDirectoriesDirectoryInfo.GetFiles )。

並使用RemoteFileInfo.IsDirectory來區分子文件夾和文件。

private void ListDirectory(TreeView treeView, string path)
{
    treeView.Nodes.Clear();
    treeView.Nodes.Add(CreateDirectoryNode(path));
}

private TreeNode CreateDirectoryNode(string path)
{
    var directoryNode = new TreeNode(RemotePath.GetFileName(path));
    var entries = sftpSession.ListDirectory(path).Files;
    var directories =
        files.Where(_ => _.IsDirectory &&
                    !_.IsParentDirectory && !_.IsThisDirectory);
    foreach (var directory in directories)
        directoryNode.Nodes.Add(CreateDirectoryNode(directory.FullName));
    foreach (var file in entries.Where(_ => !_.IsDirectory))
        directoryNode.Nodes.Add(new TreeNode(file.Name));
    return directoryNode;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM