Esempio n. 1
0
        // Возьмём Массив из стандартной библиотеки

        public Calculation()
        {
            Items = ArrayImpl.Constructor() as ArrayImpl;

            // Также можно написать items = new ArrayIml();
            // но лучше вызвать предлагаемый библиотекой конструктор
        }
        public ArrayImpl NamespaceUris()
        {
            var result = ArrayImpl.Constructor() as ArrayImpl;

            foreach (var ns in _nsmap.Values.Distinct())
            {
                result.Add(ValueFactory.Create(ns));
            }
            return(result);
        }
        public ArrayImpl Prefixes(string namespaceUri)
        {
            var result = ArrayImpl.Constructor() as ArrayImpl;

            foreach (var prefix in _nsmap
                     .Where((arg) => arg.Value.Equals(namespaceUri, StringComparison.Ordinal))
                     .Select((arg) => arg.Key))
            {
                result.Add(ValueFactory.Create(prefix));
            }

            return(result);
        }
Esempio n. 4
0
        public ArrayImpl FindFiles(string path, string mask = null, bool recursive = true)
        {
            var result = ArrayImpl.Constructor() as ArrayImpl;

            Regex maskChecker = null;

            if (!string.IsNullOrEmpty(mask))
            {
                maskChecker = FtpCrutch.GetRegexForFileMask(mask);
            }

            if (!string.IsNullOrEmpty(path) && !path.EndsWith("/", StringComparison.Ordinal))
            {
                path += "/";
            }
            path = ApplyCurrentPath(path);

            IList <string> files, directories;

            try
            {
                ListFiles(path, out directories, out files);
            }
            catch (System.Net.ProtocolViolationException)
            {
                return(result);
            }
            catch (WebException ex)
            {
                var error = (FtpWebResponse)ex.Response;
                if (error.StatusCode == FtpStatusCode.ActionNotTakenFileUnavailable)
                {
                    return(result);
                }
                throw ex;
            }
            catch
            {
                throw;
            }

            foreach (var dirName in directories)
            {
                var dirEntry = new FtpFile(this, path, dirName, isDir: true);
                if (maskChecker?.IsMatch(dirName) ?? true)
                {
                    result.Add(dirEntry);
                }
                if (recursive)
                {
                    var filesInDir = FindFiles(dirEntry.FullName, mask, recursive);
                    foreach (var fileEntry in filesInDir)
                    {
                        result.Add(fileEntry);
                    }
                }
            }

            foreach (var fileName in files)
            {
                if (maskChecker?.IsMatch(fileName) ?? true)
                {
                    var fileEntry = new FtpFile(this, path, fileName);
                    result.Add(fileEntry);
                }
            }

            return(result);
        }