public static FileInfo FromString(string s) { FileInfo fileInfo; var match = statLineRegex.Match(s); if (!match.Success) { throw new ArgumentException("Invalid stat string"); } fileInfo = new FileInfo(); // Determine if file is file, directory or symlink switch (match.Groups[1].Value) { case "-": fileInfo.IsFile = true; break; case "d": fileInfo.IsDirectory = true; break; case "l": fileInfo.IsSymbolicLink = true; break; } // Set permissions fileInfo.FilePermissions = FilePermissionCollection.FromString(match.Groups[2].Value); // Hard link count fileInfo.HardLinkCount = Convert.ToInt32(match.Groups[3].Value); // Owner/group fileInfo.Owner = match.Groups[4].Value; fileInfo.Group = match.Groups[5].Value; // File size fileInfo.FileSize = Convert.ToInt32(match.Groups[6].Value); // Modification date DateTime modificationDate; if (!DateTime.TryParseExact(match.Groups[7].Value, "MMM dd HH:mm", CultureInfo.InvariantCulture, DateTimeStyles.AllowWhiteSpaces | DateTimeStyles.AssumeUniversal, out modificationDate)) { DateTime.TryParseExact(match.Groups[7].Value, "MMM dd yyyy", CultureInfo.InvariantCulture, DateTimeStyles.AllowWhiteSpaces | DateTimeStyles.AssumeUniversal, out modificationDate); } fileInfo.ModificationDate = modificationDate; // Filename fileInfo.FileName = match.Groups[8].Value; return(fileInfo); }
public static FilePermissionCollection FromString(string permissions) { permissions = permissions?.Trim() ?? "---------"; var fp = new FilePermissionCollection(); if (permissions.Length != 9) { throw new ArgumentException("Permission string must be 9 characters long"); } if (string.IsNullOrWhiteSpace(permissions)) { return(new FilePermissionCollection()); } fp.User = FilePermissionSet.FromString(permissions.Substring(0, 3)); fp.Group = FilePermissionSet.FromString(permissions.Substring(3, 3)); fp.Other = FilePermissionSet.FromString(permissions.Substring(6, 3)); return(fp); }