Синтаксический анализ файла для Windows FTP-сервера - PullRequest
0 голосов
/ 16 декабря 2009

Я пытаюсь подключиться к FTP-серверу через код c # и получаю список файлов и каталогов. И это я сохраняю в ArrayList (со всеми атрибутами). Я могу найти тип FTP-сервера с помощью команды SYS ftp. У меня есть регулярное выражение для файлов на основе UNIX для анализа атрибутов file \ directoryies. Но у меня нет выражения для разбора файлов Windows FTP-сервера. Мне нужна помощь в создании этого ..

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

Мне нужно разобрать их. Дата, время, каталог \ файл, имя файла

Пожалуйста, помогите. Спасибо.

Ответы [ 3 ]

0 голосов
/ 16 декабря 2009

Похоже, что линии имеют фиксированную структуру. Так что вы можете просто сделать это:

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);
0 голосов
/ 16 декабря 2009

Я не знаю много о C #, но если вам просто нужен RegEx, попробуйте это:

^(\d\d-\d\d-\d\d)\s+(\d\d:\d\d(AM|PM))\s+([\w<>]*)\s+(\d*)\s+([\w\._\-]+)\s*$

$ 1 = дата, $ 2 = время, $ 3 = час или час, $ 4 = тип (может быть нулевым), $ 5 = размер (ноль, если каталог), $ 6 = имя

или если $ 4 только или пусто

^(\d\d-\d\d-\d\d)\s+(\d\d:\d\d(AM|PM))\s+(<DIR>)?\s+(\d*)\s+([\w\._\-]+)\s*$

Полагаю, что "<" и ">" не являются специальными символами в c #

0 голосов
/ 16 декабря 2009
^(\d{2}-\d{2}-\d{2}\s*\d{2}:\d{2}(A|P)M)\s*(<DIR>){0,1}\s*(\d*)\s*(\w)\s*$

Группы захвата: 0: дата и время 1: есть реж 2: FileSize (или ноль для каталога) 3: Имя

У меня нет удобного компилятора, поэтому я не могу его проверить, но он должен быть достаточно близко, чтобы начать.

...