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.

Foi útil?

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);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top