Csharp/C#教程:从WebRequestMethods.Ftp.ListDirectoryDe​​tails中提取文件名分享


从WebRequestMethods.Ftp.ListDirectoryDe​​tails中提取文件名

我有一个应用程序执行以下操作:目录列表,下载文件,全部下载。

从WebRequestMethods.Ftp.ListDirectoryDe​​tails获取文件名时遇到问题。 对于每种情况,似乎都不可能这样做。

WebRequestMethods.Ftp.ListDirectoryDe​​tails以下列方式返回lineItem:

“-rw-r – r– 1 ftp ftp 39979 Aug 01 16:02 db to pc 2014-08-05 07-30-00.csv”

我正在使用第一个字符来确定它是文件还是目录。 然后我在空间上拆分文件,并在拆分中的固定索引量之后获取文件名。 我的实现中的问题是,如果一个文件有多个空格,那么它将被错误地引用,空格较少,并且在尝试下载时不会找到该文件。

我无法使用split.last(),因为文件名可以包含空格,也不能包含WebRequestMethods.Ftp.ListDirectory,因为它不允许我们区分目录和没有扩展名的文件。 也不是正则表达式,因为文件名可以包含日期。 寻找完全涵盖所有案例的解决方案的任何帮助都会很棒。

bool isDirectory = line.Substring(0,1).Equals("d", System.StringComparison.OrdinalIgnoreCase); string[] itemNames = line.Split(new[] { ' ', 't' }, StringSplitOptions.RemoveEmptyEntries).Select((value, index) => new { value, index }).Where(i => i.index > 7).Select(i => i.value).ToArray(); string val = string.Join(" ", itemNames); 

最终的解决方案是使用正则表达式并使用组拆分它。 这解决了所有问题,并允许我获取文件/目录名称以及它是目录还是文件。

 string regex = @"^" + //# Start of line @"(?[-ld])" + //# File size @"(?[-rwx]{9})" + //# Whitespace n @"s+" + //# Whitespace n @"(?d+)" + @"s+" + //# Whitespace n @"(?w+)" + @"s+" + //# Whitespace n @"(?w+)" + @"s+" + //# Whitespace n @"(?d+)" + @"s+" + //# Whitespace n @"(?w{3})" + //# Month (3 letters) n @"s+" + //# Whitespace n @"(?d{1,2})" + //# Day (1 or 2 digits) n @"s+" + //# Whitespace n @"(?[d:]{4,5})" + //# Time or year n @"s+" + //# Whitespace n @"(?(.*))" + //# Filename n @"$"; //# End of line var split = new Regex(regex).Match(line); string dir = split.Groups["dir"].ToString(); string filename = split.Groups["filename"].ToString(); bool isDirectory = !string.IsNullOrWhiteSpace(dir) && dir.Equals("d", StringComparison.OrdinalIgnoreCase); 

感谢: http : //blogs.msdn.com/b/adarshk/archive/2004/09/15/sample-code-for-parsing-ftpwebrequest-response-for-listdirectorydetails.aspx提供正则表达式。

更简单的解决方案可能是:

 isDirectory=line[0]=='d'; filename = line.Split(new char[] {' '}, 9,StringSplitOptions.RemoveEmptyEntries)[8] 

根据Sasa的建议 ,以下代码可用于获取文件列表。

上述就是C#学习教程:从WebRequestMethods.Ftp.ListDirectoryDe​​tails中提取文件名分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

 List availableFiles = new List(); string line = string.Empty; ftpRequest.Method = WebRequestMethods.Ftp.ListDirectoryDetails; using (FtpWebResponse response = (FtpWebResponse)ftpRequest.GetResponse()) { using (StreamReader streamReader = new StreamReader(response.GetResponseStream())) { line = streamReader.ReadLine(); while (!string.IsNullOrEmpty(line)) { if (line[0] != 'd') { availableFiles.Add(line.Split(new char[] { ' ' }, 9, StringSplitOptions.RemoveEmptyEntries)[8]); } line = streamReader.ReadLine(); } } } 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1020541.html

(0)
上一篇 2022年1月4日
下一篇 2022年1月4日

精彩推荐