Ejemplo n.º 1
0
        /// <summary>
        /// Recursive method to walk the hierarchy and find the file requested.
        /// </summary>
        /// <param name="path">Base path</param>
        /// <param name="searchFile">Filename to search for</param>
        /// <param name="direction">Search up or down the tree including base path</param>
        /// <returns></returns>
        private static string FindFileInHierarchyInternal(string path, string searchFile,
                                                          FindFileInHierarchyDirection direction = FindFileInHierarchyDirection.Up)
        {
            if (path == null)
            {
                return(null);
            }

            var dir = new DirectoryInfo(path);

            var so = SearchOption.TopDirectoryOnly;

            if (direction == FindFileInHierarchyDirection.Down)
            {
                so = SearchOption.AllDirectories;
            }

            var files = dir.GetFiles(searchFile, so);

            if (files.Length > 0)
            {
                return(files[0].FullName);  // closest match
            }
            if (direction == FindFileInHierarchyDirection.Down)
            {
                return(null);
            }

            if (dir.Parent == null)
            {
                return(null);
            }

            return(FindFileInHierarchyInternal(dir.Parent.FullName, searchFile, FindFileInHierarchyDirection.Up));
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Searches for a file name based on a current file location up or down the
        /// directory hierarchy including the current folder. First file match is returned.
        /// </summary>
        /// <param name="currentPath">Current path or filename to determine start folder to search up from</param>
        /// <param name="searchFile">File name to search for. Should be a filename but can contain wildcards</param>
        /// <param name="direction">Search up or down the directory hierarchy including base path</param>
        /// <returns></returns>
        public static string FindFileInHierarchy(string currentPath, string searchFile,
                                                 FindFileInHierarchyDirection direction = FindFileInHierarchyDirection.Up)
        {
            string filename = null;
            string path     = null;

            var fi = new FileInfo(currentPath);

            if (!fi.Exists)
            {
                var di = new DirectoryInfo(currentPath);
                if (!di.Exists)
                {
                    return(null);
                }

                path = di.FullName;
            }
            else
            {
                path = fi.DirectoryName;
            }

            return(FindFileInHierarchyInternal(path, searchFile, direction));
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Recursive method to walk the hierarchy and find the file requested.
        /// </summary>
        /// <param name="path">Base path</param>
        /// <param name="searchFile">Filename to search for</param>
        /// <param name="direction">Search up or down the tree including base path</param>
        /// <returns></returns>
        private static string[] FindFilesInHierarchyInternal(string path, string searchFile,
                                                             FindFileInHierarchyDirection direction = FindFileInHierarchyDirection.Up)
        {
            var list = new string[] { };

            if (path == null)
            {
                return(list);
            }

            var dir = new DirectoryInfo(path);

            var so = SearchOption.TopDirectoryOnly;

            if (direction == FindFileInHierarchyDirection.Down)
            {
                so = SearchOption.AllDirectories;
            }

            var files = dir.GetFiles(searchFile, so);

            if (files.Length > 0)
            {
                return(files.Select(fi => fi.FullName).ToArray());
            }

            if (direction == FindFileInHierarchyDirection.Down)
            {
                return(list);
            }

            if (dir.Parent == null)
            {
                return(list);
            }

            return(FindFilesInHierarchyInternal(dir.Parent.FullName, searchFile, FindFileInHierarchyDirection.Up));
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Returns a list of file matches searching up and down a file hierarchy
        /// </summary>
        /// <param name="startPath">Path to start from</param>
        /// <param name="searchFile">Filename or Wildcard</param>
        /// <param name="direction">up or down the hiearchy</param>
        /// <returns></returns>
        public static string[] FindFilesInHierarchy(string startPath, string searchFile,
                                                    FindFileInHierarchyDirection direction = FindFileInHierarchyDirection.Down)
        {
            var list = new string[] { };

            var fi = new FileInfo(startPath);

            if (!fi.Exists)
            {
                var di = new DirectoryInfo(startPath);
                if (!di.Exists)
                {
                    return(list);
                }

                startPath = di.FullName;
            }
            else
            {
                startPath = fi.DirectoryName;
            }

            return(FindFilesInHierarchyInternal(startPath, searchFile, direction));
        }