Пример #1
0
        private static Atom ReadDirectory(Atom args, Context context)
        {
            Atom path = args?.atom;

            if (path == null || !path.IsString())
            {
                throw new ArgumentException("Path must be string!");
            }
            string       directory = (string)path.value;
            Atom         pattern   = args?.next?.atom;
            Atom         mode      = args?.next?.next?.atom;
            SearchOption option    = ArgUtils.GetEnum <SearchOption>(
                mode, 3);

            string[] dirs = null;
            if (pattern == null)
            {
                dirs = Directory.GetDirectories(directory);
            }
            else
            {
                dirs = Directory.GetDirectories(directory, (string)pattern.value, option);
            }

            string[] files = null;
            if (pattern == null)
            {
                files = Directory.GetFiles(directory);
            }
            else
            {
                files = Directory.GetFiles(directory, (string)pattern.value, option);
            }

            Atom[] elements = new Atom[dirs.Length + files.Length];
            for (int i = 0; i < dirs.Length; i++)
            {
                elements[i] = new Atom(AtomType.String, dirs[i]);
            }
            for (int i = 0; i < files.Length; i++)
            {
                elements[i + dirs.Length] = new Atom(AtomType.String, files[i]);
            }

            return(Atom.List(elements));
        }