我有一个应用程序,可以进行以下操作:目录列表、下载文件、下载所有文件。
我遇到了一个问题,就是无法从 WebRequestMethods.Ftp.ListDirectoryDetails 中获取文件名。看起来在每种情况下都不可能这样做。
WebRequestMethods.Ftp.ListDirectoryDetails 以如下方式返回 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,因为它不允许我们区分没有扩展名的目录和文件。正则表达式也不行,因为文件名中可能包含日期。任何能够完全覆盖所有情况的解决方案都将是非常好的帮助。
我遇到了一个问题,就是无法从 WebRequestMethods.Ftp.ListDirectoryDetails 中获取文件名。看起来在每种情况下都不可能这样做。
WebRequestMethods.Ftp.ListDirectoryDetails 以如下方式返回 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);