سؤال

أحاول الاتصال بخادم FTP من خلال رمز C # وأحصل على قائمة الملفات والدلائل. وهذا أحفظ في قائمة صفيف (مع كل سمات). يمكنني العثور على نوع خادم FTP من خلال أمر SYS FTP. لدي تعبير منتظم لملفات UNIX المستندة إلى تحليل سمات الملف الدلائل. ولكن ليس لدي تعبير عن تحليل ملفات خادم 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

أحتاج إلى تحليل هذه. التاريخ والوقت، Dir ملف، اسم الملف

الرجاء المساعدة. شكرًا.

هل كانت مفيدة؟

المحلول

أنا لا أعرف الكثير عن 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 = AM أو PM، $ 4 = النوع (قد يكون فارغا)، $ 5 = الحجم (NULL إذا كان DIR)، $ 6 = الاسم

أو IFF $ 4 هو فقط أو فارغ

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

أفترض أن "<" و ">" ليست سحر خاصة في C #

نصائح أخرى

^(\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: هو Dir 2: filesize (أو null for directory) 3: الاسم

ليس لدي مترجم مفيد لذلك لا أستطيع اختبار ذلك، لكن يجب أن يكون قريبا بما يكفي للبدء.

يبدو أن الخطوط لديها هيكل ثابت. لذلك يمكنك ببساطة القيام بذلك:

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);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top