2009-12-16 3 views
0

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

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 

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

Пожалуйста, помогите. Благодарю.

ответ

0

Я много о 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

$ 4 = тип (может быть null), здесь похоже проблема. В этом случае я получаю '>' Пожалуйста, проверьте его. – marshalprince

+1

ok возможно C# needs ([\ w <>] +) *, мое намерение было: может быть, может быть что-то другое, чем «

», так что если только появляется или не заменяет его ()? (? -> опционально означает ноль или один) –

0
^(\d{2}-\d{2}-\d{2}\s*\d{2}:\d{2}(A|P)M)\s*(<DIR>){0,1}\s*(\d*)\s*(\w)\s*$ 

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

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

+0

Regex регулярных выражений = новый Regex (@ "^ (\ d {2} - \ d {2} - \ d {2} \ s * \ d {2}: \ d {2} (A | P) M) \ s * (

) {0,1} \ s * (\ d *) \ s * (\ w) \ s * $ ", RegexOptions.Compiled | RegexOptions.Multiline | RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace); Match match = regex.Match (filedetail); здесь матч возвращает null. – marshalprince

0

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

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); 
Смежные вопросы