Source/Tx.Bond/Internal/PathUtils.cs (57 lines of code) (raw):

namespace Tx.Bond { using System.Collections.Generic; using System.IO; using System.Linq; internal static class PathUtils { public static IEnumerable<string> FlattenIfNeeded(string path) { var directory = Path.GetDirectoryName(path); var name = Path.GetFileName(path); if (string.IsNullOrEmpty(name)) { name = "*.*"; } if (name.Contains("*") || name.Contains("?")) { return Directory.EnumerateFiles(directory, name) .ToArray(); } return new[] { path, }; } public static bool IsValidPath(string path) { if (string.IsNullOrWhiteSpace(path)) { return false; } var directory = Path.GetDirectoryName(path); if (directory == null || !Directory.Exists(directory)) { return false; } var filename = Path.GetFileName(path); if (string.IsNullOrEmpty(filename)) { return true; } var invalidCharacters = Path.GetInvalidFileNameChars() .Where(i => i != '*' && i != '?') .ToArray(); if (filename.Any(c => invalidCharacters.Contains(c))) { return false; } if (filename.Contains('*') || filename.Contains('?')) { return true; } var fileExists = File.Exists(path); return fileExists; } } }