gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 00:02:52 32 4
gpt4 key购买 nike

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

我在从 WebRequestMethods.Ftp.ListDirectoryDe​​tails 获取文件名时遇到问题。似乎不可能对所有场景都这样做。

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

“-rw-r--r-- 1 ftp ftp 39979 Aug 01 16:02 db 到 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
@"(?<dir>[\-ld])" + //# File size
@"(?<permission>[\-rwx]{9})" + //# Whitespace \n
@"\s+" + //# Whitespace \n
@"(?<filecode>\d+)" +
@"\s+" + //# Whitespace \n
@"(?<owner>\w+)" +
@"\s+" + //# Whitespace \n
@"(?<group>\w+)" +
@"\s+" + //# Whitespace \n
@"(?<size>\d+)" +
@"\s+" + //# Whitespace \n
@"(?<month>\w{3})" + //# Month (3 letters) \n
@"\s+" + //# Whitespace \n
@"(?<day>\d{1,2})" + //# Day (1 or 2 digits) \n
@"\s+" + //# Whitespace \n
@"(?<timeyear>[\d:]{4,5})" + //# Time or year \n
@"\s+" + //# Whitespace \n
@"(?<filename>(.*))" + //# 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用于提供正则表达式。

关于c# - 从 WebRequestMethods.Ftp.ListDirectoryDe​​tails 中提取文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25246426/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com