[英]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.GetDirectories
和DirectoryInfo.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.