我在网上搜索过,对此仍然很陌生。请对我有一些耐心。
我想做的是: - 我有一个名为“treeTO”的 TreeView。- 我连接到我的 FTP 服务器,并且想要在树视图中填充此处的所有内容(目录、子目录和文件,无论是什么)。- 这是我到目前为止的代码:
FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://" + ActiveServer.Server + "/");
request.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
request.Credentials = new NetworkCredential(ActiveServer.UserName, ActiveServer.Password);
FtpWebResponse response = (FtpWebResponse)request.GetResponse();
Stream responseStream = response.GetResponseStream();
StreamReader reader = new StreamReader(responseStream);
Run Code Online (Sandbox Code Playgroud)
-这将返回以下文本:日志、数据和 WwwRoot。
我很难将其添加到树视图中,然后循环遍历文件夹以将所有内容添加到树视图中。
所以这里\xc2\xb4s是我为你提供的工作解决方案!
\n\n当然,您必须将“root”的值替换为 FTP 服务器的 rootURL,并在方法 GetWebRequest() 中将“用户名”和“密码”替换为您的凭据!
\n\n您需要这个类来保存详细信息
\n\npublic class FTPListDetail\n{\n public bool IsDirectory\n {\n get\n {\n return !string.IsNullOrWhiteSpace(Dir) && Dir.ToLower().Equals("d");\n }\n }\n internal string Dir { get; set; }\n public string Permission { get; set; }\n public string Filecode { get; set; }\n public string Owner { get; set; }\n public string Group { get; set; }\n public string Name { get; set; }\n public string FullPath { get; set; }\n}\nRun Code Online (Sandbox Code Playgroud)\n\n这是您的 WinForm 应用程序的代码隐藏
\n\nprivate void button1_Click(object sender, EventArgs e)\n{\n var root = "ftp://ftp.yourFTPServer.at";\n\n treeView1.Nodes.Clear();\n treeView1.Nodes.Add(CreateDirectoryNode(root, "root"));\n}\n\nprivate TreeNode CreateDirectoryNode(string path, string name)\n{\n var directoryNode = new TreeNode(name);\n var directoryListing = GetDirectoryListing(path);\n\n var directories = directoryListing.Where(d => d.IsDirectory);\n var files = directoryListing.Where(d => !d.IsDirectory);\n\n foreach (var dir in directories)\n {\n directoryNode.Nodes.Add(CreateDirectoryNode(dir.FullPath, dir.Name));\n }\n foreach (var file in files)\n {\n directoryNode.Nodes.Add(new TreeNode(file.Name));\n }\n return directoryNode;\n}\n\npublic IEnumerable<FTPListDetail> GetDirectoryListing(string rootUri)\n{\n var CurrentRemoteDirectory = rootUri;\n var result = new StringBuilder();\n var request = GetWebRequest(WebRequestMethods.Ftp.ListDirectoryDetails, CurrentRemoteDirectory);\n using (var response = request.GetResponse())\n {\n using (var reader = new StreamReader(response.GetResponseStream()))\n {\n string line = reader.ReadLine();\n while (line != null)\n {\n result.Append(line);\n result.Append("\\n");\n line = reader.ReadLine();\n }\n if (string.IsNullOrEmpty(result.ToString()))\n {\n return new List<FTPListDetail>();\n }\n result.Remove(result.ToString().LastIndexOf("\\n"), 1);\n var results = result.ToString().Split(\'\\n\');\n string regex =\n @"^" + //# Start of line\n @"(?<dir>[\\-ld])" + //# File size \n @"(?<permission>[\\-rwx]{9})" + //# Whitespace \\n\n @"\\s+" + //# Whitespace \\n\n @"(?<filecode>\\d+)" +\n @"\\s+" + //# Whitespace \\n\n @"(?<owner>\\w+)" +\n @"\\s+" + //# Whitespace \\n\n @"(?<group>\\w+)" +\n @"\\s+" + //# Whitespace \\n\n @"(?<size>\\d+)" +\n @"\\s+" + //# Whitespace \\n\n @"(?<month>\\w{3})" + //# Month (3 letters) \\n\n @"\\s+" + //# Whitespace \\n\n @"(?<day>\\d{1,2})" + //# Day (1 or 2 digits) \\n\n @"\\s+" + //# Whitespace \\n\n @"(?<timeyear>[\\d:]{4,5})" + //# Time or year \\n\n @"\\s+" + //# Whitespace \\n\n @"(?<filename>(.*))" + //# Filename \\n\n @"$"; //# End of line\n\n var myresult = new List<FTPListDetail>();\n foreach (var parsed in results)\n {\n var split = new Regex(regex)\n .Match(parsed);\n var dir = split.Groups["dir"].ToString();\n var permission = split.Groups["permission"].ToString();\n var filecode = split.Groups["filecode"].ToString();\n var owner = split.Groups["owner"].ToString();\n var group = split.Groups["group"].ToString();\n var filename = split.Groups["filename"].ToString();\n myresult.Add(new FTPListDetail()\n {\n Dir = dir,\n Filecode = filecode,\n Group = group,\n FullPath = CurrentRemoteDirectory + "/" + filename,\n Name = filename,\n Owner = owner,\n Permission = permission,\n });\n };\n return myresult;\n }\n }\n}\n\nprivate FtpWebRequest GetWebRequest(string method, string uri)\n{\n Uri serverUri = new Uri(uri);\n if (serverUri.Scheme != Uri.UriSchemeFtp)\n {\n return null;\n }\n var reqFTP = (FtpWebRequest)FtpWebRequest.Create(serverUri);\n reqFTP.Method = method;\n reqFTP.UseBinary = true;\n reqFTP.Credentials = new NetworkCredential("yourUser", "yourPassword");\n reqFTP.Proxy = null;\n reqFTP.KeepAlive = false;\n reqFTP.UsePassive = false;\n return reqFTP;\n}\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
5715 次 |
| 最近记录: |