Beispiel #1
0
        /// <summary>
        /// Finds all files which are valid to the mask <paramref name="filemask"/> in the path
        /// <paramref name="directory"/> and all subdirectories
        /// (if <paramref name="searchSubdirectories"/> is true).
        /// If <paramref name="ignoreHidden"/> is true, hidden files and folders are ignored.
        /// </summary>
        static IEnumerable<FileName> SearchDirectoryInternal(string directory, string filemask, bool searchSubdirectories, bool ignoreHidden)
        {
            // If Directory.GetFiles() searches the 8.3 name as well as the full name so if the filemask is
            // "*.xpt" it will return "Template.xpt~"
            bool isExtMatch = filemask != null && Regex.IsMatch(filemask, @"^\*\.[\w\d_]{3}$");
            string ext = null;
            if (isExtMatch) ext = filemask.Substring(1);
            IEnumerable<string> dir = new[] { directory };

            if (searchSubdirectories)
                dir = dir.Flatten(
                    d => {
                        try {
                            if (ignoreHidden)
                                return Directory.EnumerateDirectories(d).Where(IsNotHidden);
                            else
                                return Directory.EnumerateDirectories(d);
                        } catch (UnauthorizedAccessException) {
                            return new string[0];
                        }
                    });
            foreach (string d in dir) {
                IEnumerable<string> files;
                try {
                    files = Directory.EnumerateFiles(d, filemask);
                } catch (UnauthorizedAccessException) {
                    continue;
                }
                foreach (string f in files) {
                    if (ext != null && !f.EndsWith(ext, StringComparison.OrdinalIgnoreCase))
                        continue; // file extension didn't match
                    if (!ignoreHidden || IsNotHidden(f))
                        yield return new FileName(f);
                }
            }
        }
Beispiel #2
0
		/// <summary>
		/// Finds all files which are valid to the mask <paramref name="filemask"/> in the path
		/// <paramref name="directory"/> and all subdirectories
		/// (if <paramref name="searchSubdirectories"/> is true).
		/// If <paramref name="ignoreHidden"/> is true, hidden files and folders are ignored.
		/// </summary>
		static IEnumerable<FileName> SearchDirectoryInternal(string directory, string filemask, bool searchSubdirectories, bool ignoreHidden)
		{
			// If Directory.GetFiles() searches the 8.3 name as well as the full name so if the filemask is
			// "*.xpt" it will return "Template.xpt~"
			bool isExtMatch = Regex.IsMatch(filemask, @"^\*\..{3}$");
			string ext = null;
			if (isExtMatch) ext = filemask.Remove(0,1);
			string[] empty = new string[0];
			IEnumerable<string> dir = new[] { directory };
			
			if (searchSubdirectories)
				dir = dir.Flatten(
					d => {
						try {
							if (ignoreHidden)
								return Directory.EnumerateDirectories(d).Where(child => IsNotHidden(child));
							else
								return Directory.EnumerateDirectories(d);
						} catch (UnauthorizedAccessException) {
							return empty;
						}
					});
			foreach (string d in dir) {
				IEnumerable<string> files;
				try {
					files = Directory.EnumerateFiles(d, filemask);
				} catch (UnauthorizedAccessException) {
					continue;
				}
				foreach (string f in files) {
					if (!ignoreHidden || IsNotHidden(f))
						yield return new FileName(f);
				}
			}
		}