//Парсинг, если фтп сервера работает на Windows private FileStruct ParseFileStructFromWindowsStyleRecord(string Record) { //Предположим стиль записи 02-03-04 07:46PM <DIR> Append FileStruct f = new FileStruct(); string processstr = Record.Trim(); //Получаем дату string dateStr = processstr.Substring(0, 8); processstr = (processstr.Substring(8, processstr.Length - 8)).Trim(); //Получаем время string timeStr = processstr.Substring(0, 7); processstr = (processstr.Substring(7, processstr.Length - 7)).Trim(); f.CreateTime = dateStr + " " + timeStr; //Это папка или нет if (processstr.Substring(0, 5) == "<DIR>") { f.IsDirectory = true; processstr = (processstr.Substring(5, processstr.Length - 5)).Trim(); } else { string[] strs = processstr.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); processstr = strs[1]; f.IsDirectory = false; } //Остальное содержмое строки представляет имя каталога/файла f.Name = processstr; return f; }
//Если сервер работает на nix-ах private FileStruct ParseFileStructFromUnixStyleRecord(string record) { //Предположим. тчо запись имеет формат dr-xr-xr-x 1 owner group 0 Nov 25 2002 bussys FileStruct f = new FileStruct(); if (record[0] == '-' || record[0] == 'd') {// правильная запись файла string processstr = record.Trim(); f.Flags = processstr.Substring(0, 9); f.IsDirectory = (f.Flags[0] == 'd'); processstr = (processstr.Substring(11)).Trim(); //отсекаем часть строки _cutSubstringFromStringWithTrim(ref processstr, ' ', 0); f.Owner = _cutSubstringFromStringWithTrim(ref processstr, ' ', 0); f.CreateTime = getCreateTimeString(record); //Индекс начала имени файла int fileNameIndex = record.IndexOf(f.CreateTime) + f.CreateTime.Length; //Само имя файла f.Name = record.Substring(fileNameIndex).Trim(); } else { f.Name = ""; } return f; }
private List<FileStruct> GetList(string datastring) { List<FileStruct> myListArray = new List<FileStruct>(); string[] dataRecords = datastring.Split('\n'); //Получаем стиль записей на сервере FileListStyle _directoryListStyle = GuessFileListStyle(dataRecords); foreach (string s in dataRecords) { if (_directoryListStyle != FileListStyle.Unknown && s != "") { FileStruct f = new FileStruct(); f.Name = ".."; switch (_directoryListStyle) { case FileListStyle.UnixStyle: f = ParseFileStructFromUnixStyleRecord(s); break; case FileListStyle.WindowsStyle: f = ParseFileStructFromWindowsStyleRecord(s); break; } if (f.Name != "" && f.Name != "." && f.Name != "..") { myListArray.Add(f); } } } return myListArray; }