Analisar detalhes do arquivo para o Windows FTP Server
-
19-09-2019 - |
Pergunta
Estou tentando me conectar ao servidor FTP através do código C# e estou obtendo a lista de arquivos e diretórios. E que estou economizando em uma lista de Array (com todos os atributos). Eu posso encontrar o tipo de servidor FTP através do comando SYS FTP. Eu tenho uma expressão regular para arquivos baseados no UNIX para analisar os atributos do arquivo diretórios. Mas não tenho expressão para o Windows FTP Server Arquivos Parsing. Eu preciso de ajuda para fazer isso ..
04-30-09 10:40AM <DIR> Acrobat
12-08-09 10:36PM 9058 AuthCheck.zip
12-06-09 12:49PM 174 desktop.ini
11-09-09 03:33PM <DIR> FailedPDF
Eu preciso analisar isso. Data, hora, Arquivo Dir , nome do arquivo
Por favor ajude. Obrigado.
Solução
Não sei muito sobre C#, mas se você só precisar de um regex, tente este:
^(\d\d-\d\d-\d\d)\s+(\d\d:\d\d(AM|PM))\s+([\w<>]*)\s+(\d*)\s+([\w\._\-]+)\s*$
$ 1 = data, $ 2 = hora, $ 3 = am ou pm, $ 4 = tipo (pode ser nulo), $ 5 = tamanho (nulo se dir), $ 6 = nome
ou Iff $ 4 está apenas ou vazio
^(\d\d-\d\d-\d\d)\s+(\d\d:\d\d(AM|PM))\s+(<DIR>)?\s+(\d*)\s+([\w\._\-]+)\s*$
Suponho que "<" e ">" não são chars especiais em C#
Outras dicas
^(\d{2}-\d{2}-\d{2}\s*\d{2}:\d{2}(A|P)M)\s*(<DIR>){0,1}\s*(\d*)\s*(\w)\s*$
Capture Groups: 0: DateTime 1: é Dir 2: FileSize (ou NULL for Directory) 3: Nome
Eu não tenho um compilador à mão, então não posso testar isso, mas deve estar perto o suficiente para começar.
Parece que as linhas têm estrutura fixa. Então você pode simplesmente fazer isso:
Date fileDate;
bool isDir;
int fileSize;
string fileName;
fileDate=line.Substring(0,18).ParseExact("MM-dd-yy hh-sstt");
isDir=line.Substring(24,5)=="DIR";
if (!isDir)
{
fileSize=int.Parse(line.Substring(29,10).Trim());
}
fileName=line.Substring(39);