2009-12-16 4 views
0

J'essaie de me connecter au serveur FTP via le code C# et j'obtiens la liste des fichiers et des répertoires. Et que je sauvegarde dans une ArrayList (avec tous les attributs). Je peux trouver le type de serveur FTP à travers la commande ftp SYS. J'ai une expression régulière pour les fichiers basés sur UNIX pour analyser les attributs file \ directories. Mais je n'ai aucune expression pour l'analyse des fichiers du serveur FTP Windows. J'ai besoin d'aide pour faire cela ..Analyser les détails du fichier pour 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 

J'ai besoin d'analyser ces. Date, Heure, Dir \ Fichier, Nom du fichier

Aidez-nous s'il vous plaît. Merci.

Répondre

0

Je ne sais pas beaucoup sur C#, mais si vous avez juste besoin d'un RegEx essayer celui-ci:

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

1 $ = jour, $ 2 = temps , $ 3 = am ou pm, 4 $ = le type (peut être nULL), 5 $ = taille (null si dir), 6 $ = nom

ou IFF 4 $ est seulement vide ou

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

Je suppose que "<" et ">" sont pas les caractères spéciaux à C#

+0

$ 4 = type (peut être nul), semble être un problème. En cas de dis je reçois '>' S'il vous plaît revérifier. – marshalprince

+1

ok peut-être C# needs ([\ w <>] +) *, mon intention était: peut-être il pourrait y avoir quelque chose de différent de "

", donc si seulement apparaît ou ne pas le remplacer par ()? (? -> optionnel signifie zéro ou un) –

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

groupes de capture: 0: datetime 1: Est-dir 2: FileSize (ou null pour le répertoire) 3: Nom

Je n'ai pas un compilateur à portée de main, donc je ne peux pas tester, mais il devrait être assez proche pour commencer.

+0

Regex regex = new 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); Correspondance de correspondance = regex.Match (filedetail); ici correspond null. – marshalprince

0

On dirait que les lignes ont une structure fixe. Ainsi, vous pouvez simplement faire ceci:

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); 
Questions connexes