private void ProcessLink(string name, LSFile file) { String[] segments = name.Split(new string[] { " -> " }, StringSplitOptions.RemoveEmptyEntries); // we should have 2 segments if (segments.Length == 2) { file.LinkPath = segments[1].Trim(); } }
private LSFile ProcessLine(string line) { if (String.IsNullOrWhiteSpace(line)) { return(null); } var m = Regex.Match(line.Trim(), LS_PATTERN_EX, RegexOptions.Compiled); if (!m.Success) { return(null); } LSFile file = new LSFile(); file.Name = m.Groups[9].Value; file.Permission = m.Groups[1].Value; var sized = m.Groups[4].Value.Trim(); file.Size = Int32.Parse(sized); //folder file.IsFolder = false; switch (file.Permission[0]) { case 'b': file.Type = "Block"; break; case 'c': file.Type = "Character"; break; case 'd': /* 遇到一个recovery模式的手机,文件夹也有大小,切大小为4096,此处临时修改为此方案,以后根据测试情况在看 */ file.Type = "Directory"; if (String.IsNullOrWhiteSpace(sized) || file.Size == 4096) { file.IsFolder = true; } break; case 'l': file.Type = "Link"; this.ProcessLink(file.Name, file); break; case 's': file.Type = "Socket"; break; case 'p': file.Type = "FIFO"; break; case '-': default: file.Type = "File"; break; } //datetime String date1 = m.Groups[5].Value.Trim(); String date2 = m.Groups[6].Value.Trim(); String date3 = m.Groups[7].Value.Trim(); String time = m.Groups[8].Value.Trim(); string datestr = String.Format("{0}-{1}-{2} {3}", date1, date2.PadLeft(2, '0'), date3, time); try { var date = DateTime.ParseExact(datestr, "yyyy-MM-dd HH:mm", CultureInfo.CurrentCulture); file.CreateDate = date; } catch (Exception ex) { } //link file //return return(file); }