public string[][] Resolve(string name, LibrarySearchOptions searchOptions) { Stack <string[]> buffer = new Stack <string[]>(); // Environment variables if ((searchOptions & LibrarySearchOptions.IncludePathDirectories) != 0) { foreach (string environmentVariable in _environmentVariables) { string[] envPaths = Environment.GetEnvironmentVariable(environmentVariable).Split(Path.PathSeparator); foreach (string envPath in envPaths) { try { if (!Directory.Exists(envPath)) { continue; } buffer.Push(Directory.GetFiles(envPath, "*" + name + "*", SearchOption.TopDirectoryOnly)); } catch (UnauthorizedAccessException) { } } } } return(buffer.ToArray()); }
public static string Resolve(string name, LibrarySearchOptions searchOptions = LibrarySearchOptions.Default, string customRoot = "") { SearchOption directorySearchOption = (searchOptions & LibrarySearchOptions.IncludeSubDirectories) != 0 ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly; #region Custom root directory if ((searchOptions & LibrarySearchOptions.IncludeCustomRootDirectory) != 0) { string[] paths = Directory.GetFiles(customRoot, "*" + name + "*", directorySearchOption); LibraryInformation[] libraries = FilterPaths(name, paths); if (libraries.Length > 0) { foreach (LibraryInformation library in libraries) { Debug.Log("Found '" + Path.GetFileName(library.Path) + "'"); } LibraryInformation newest = FilterByVersionAndArchitecture(libraries); return(newest.Path); } } #endregion #region Working directory if ((searchOptions & LibrarySearchOptions.IncludeTopDirectory) != 0) { string[] paths = Directory.GetFiles(Directory.GetCurrentDirectory(), "*" + name + "*", directorySearchOption); LibraryInformation[] libraries = FilterPaths(name, paths); if (libraries.Length > 0) { foreach (LibraryInformation library in libraries) { Debug.Log("Found '" + Path.GetFileName(library.Path) + "'"); } LibraryInformation newest = FilterByVersionAndArchitecture(libraries); return(newest.Path); } } #endregion #region OS specific string[][] staggeredPaths = _osSpecificResolver.Resolve(name, searchOptions); foreach (string[] paths in staggeredPaths) { LibraryInformation[] libraries = FilterPaths(name, paths); if (libraries.Length > 0) { foreach (LibraryInformation library in libraries) { Debug.Log("Found '" + Path.GetFileName(library.Path) + "'"); } LibraryInformation newest = FilterByVersionAndArchitecture(libraries); return(newest.Path); } } #endregion // If all else fails return(name); }
public static string Locate(string name, LibrarySearchOptions searchOptions = LibrarySearchOptions.Default, string customRoot = "") { SearchOption directorySearchOption = (searchOptions & LibrarySearchOptions.IncludeSubDirectories) != 0 ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly; #region Working directory if ((searchOptions & LibrarySearchOptions.IncludeTopDirectory) != 0) { string[] paths = Directory.GetFiles(Directory.GetCurrentDirectory(), "*" + name + "*", directorySearchOption); LibraryInformation[] libraries = FilterPaths(name, paths); foreach (LibraryInformation library in libraries) { Debug.Log("Found '" + Path.GetFileName(library.Path) + "'"); } if (libraries.Length > 0) { LibraryInformation newest = FilterByVersionAndArchitecture(libraries); return(newest.Path); } } #endregion #region System directory if ((searchOptions & LibrarySearchOptions.IncludeSystemDirectory) != 0) { string[] paths = Directory.GetFiles(Directory.GetCurrentDirectory(), "*" + name + "*", SearchOption.TopDirectoryOnly); LibraryInformation[] libraries = FilterPaths(name, paths); foreach (LibraryInformation library in libraries) { Debug.Log("Found '" + Path.GetFileName(library.Path) + "'"); } if (libraries.Length > 0) { LibraryInformation newest = FilterByVersionAndArchitecture(libraries); return(newest.Path); } } #endregion #region PATH directories if ((searchOptions & LibrarySearchOptions.IncludePathDirectories) != 0) { char pathDelimiter = ';'; if (PlatformInformation.Platform == OSPlatform.Linux || PlatformInformation.Platform == OSPlatform.OSX) { pathDelimiter = ':'; } string[] pathPaths = Environment.GetEnvironmentVariable("PATH").Split(pathDelimiter); foreach (string pathPath in pathPaths) { try { if (!Directory.Exists(pathPath)) { continue; } string[] paths = Directory.GetFiles(pathPath, "*" + name + "*", SearchOption.TopDirectoryOnly); LibraryInformation[] libraries = FilterPaths(name, paths); foreach (LibraryInformation library in libraries) { Debug.Log("Found '" + Path.GetFileName(library.Path) + "'"); } if (libraries.Length > 0) { LibraryInformation newest = FilterByVersionAndArchitecture(libraries); return(newest.Path); } } catch (UnauthorizedAccessException) { } } } #endregion #region Custom root directory if ((searchOptions & LibrarySearchOptions.IncludeCustomRootDirectory) != 0) { string[] paths = Directory.GetFiles(customRoot, "*" + name + "*", directorySearchOption); LibraryInformation[] libraries = FilterPaths(name, paths); foreach (LibraryInformation library in libraries) { Debug.Log("Found '" + Path.GetFileName(library.Path) + "'"); } if (libraries.Length > 0) { LibraryInformation newest = FilterByVersionAndArchitecture(libraries); return(newest.Path); } } #endregion // If all else fails return(string.Empty); }