private static string GetValidFileName(string name) { foreach (char c in P.GetInvalidFileNameChars()) { name = name.Replace(c, '_'); } return(name); }
private string prepareElementForIO(string element) { var invalid = Path.GetInvalidFileNameChars(); var sb = new StringBuilder(); foreach (var ch in element) { if (!invalid.Contains(ch)) { sb.Append(ch); } } return(sb.ToString()); }
/// <summary> /// The create table name. /// </summary> /// <param name="layerName"> /// The layer name. /// </param> /// <returns> /// The <see cref="string"/>. /// </returns> public static string CreateTableName(string layerName) { var output = string.Format("SMA_{0}_{1}", layerName, DateTime.Now.ToString("ddMMMHHmmss")); string regexSearch = new string(Path.GetInvalidFileNameChars()) + new string(Path.GetInvalidPathChars()); var r = new Regex(string.Format("[{0}]", Regex.Escape(regexSearch))); output = r.Replace(output, string.Empty); output = output.Replace(" ", "_"); output = output.Replace("-", "_"); Regex rgx = new Regex("[^a-zA-Z0-9]"); output = rgx.Replace(output, string.Empty); return(output); }
/// <summary> /// Creates a DataDir for a generic path for the provided application name. /// </summary> public static DataDir Create(string applicationName, string companyName = null, DataDirType type = DataDirType.RoamingUser) { if (string.IsNullOrEmpty(applicationName)) { throw new ArgumentException(nameof(applicationName), "Application name cannot be null or empty."); } bool isUnix = Environment.OSVersion.Platform == PlatformID.Unix || Environment.OSVersion.Platform == PlatformID.MacOSX; string parentDirectory; string homeDirectory = Environment.GetEnvironmentVariable("HOME"); if (!isUnix && string.IsNullOrEmpty(homeDirectory)) { homeDirectory = Environment.ExpandEnvironmentVariables("%HOMEDRIVE%%HOMEPATH%"); } if (string.IsNullOrEmpty(homeDirectory)) { homeDirectory = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile); } switch (type) { case DataDirType.RoamingUser: parentDirectory = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); if (string.IsNullOrEmpty(parentDirectory)) { parentDirectory = PathType.Combine(homeDirectory, ".config"); } break; case DataDirType.LocalUser: parentDirectory = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData); if (string.IsNullOrEmpty(parentDirectory)) { parentDirectory = PathType.Combine(homeDirectory, ".local", "share"); } break; case DataDirType.SystemWide: parentDirectory = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData); if (string.IsNullOrEmpty(parentDirectory)) { parentDirectory = isUnix ? "/usr/share" : PathType.Combine(homeDirectory, "\\ProgramData"); } break; case DataDirType.Temporary: parentDirectory = PathType.GetTempPath(); break; case DataDirType.SavedGameData: parentDirectory = Native.GetKnownFolderPath( new Guid("4C5C32FF-BB9D-43b0-B5B4-2D72E54EAAA4"), isUnix ? PathType.Combine(homeDirectory, ".local/share/games") : PathType.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "My Games") ); break; default: throw new InvalidOperationException("Unsupported data directory type: " + type.ToString()); } var invalids = PathType.GetInvalidFileNameChars(); var dataDirName = new StringBuilder(); bool isValid; // company name subdirectories are common on windows but not on unix // therefore, only add the company name if not on unix if (!string.IsNullOrEmpty(companyName) && !isUnix) { foreach (char c in companyName) { isValid = true; for (int i = 0; i < invalids.Length; i++) { if (invalids[i] == c) { isValid = false; break; } } dataDirName.Append(isValid ? c : '_'); } dataDirName.Append(PathType.DirectorySeparatorChar); } foreach (char c in applicationName) { isValid = true; for (int i = 0; i < invalids.Length; i++) { if (invalids[i] == c) { isValid = false; break; } } dataDirName.Append(isValid ? c : '_'); } // check for reserved file names, and do something about it if necessary foreach (string part in dataDirName.ToString().Split(PathType.DirectorySeparatorChar)) { isValid = true; if (part == "." || part == "..") { isValid = false; } // thanks dos. thos. if (!isUnix) { if (part.Length == 3) { switch (part.ToUpperInvariant()) { case "CON": case "PRN": case "AUX": case "NUL": isValid = false; break; } } else if (part.Length == 4) { switch (part.Substring(0, 3).ToUpperInvariant()) { case "COM": case "LPT": isValid = false; break; } } } if (isValid) { parentDirectory = PathType.Combine(parentDirectory, part); } else { parentDirectory = PathType.Combine(parentDirectory, part + "_"); } } var dir = new DataDir(parentDirectory); dir.CreateIfNotExists(); return(dir); }
public static char[] GetInvalidFileNameChars() => MSIOP.GetInvalidFileNameChars();