Пример #1
0
        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);
        }