// Copyright (C) 2024, The Duplicati Team // https://duplicati.com, hello@duplicati.com // // Permission is hereby granted, free of charge, to any person obtaining a // copy of this software and associated documentation files (the "Software"), // to deal in the Software without restriction, including without limitation // the rights to use, copy, modify, merge, publish, distribute, sublicense, // and/or sell copies of the Software, and to permit persons to whom the // Software is furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // DEALINGS IN THE SOFTWARE. using System; using System.IO; namespace Duplicati.Library.Common.IO { public static class Util { /// /// A cached instance of the directory separator as a string /// public static readonly string DirectorySeparatorString = Path.DirectorySeparatorChar.ToString(); public static readonly string AltDirectorySeparatorString = Path.AltDirectorySeparatorChar.ToString(); /// /// Appends the appropriate directory separator to paths, depending on OS. /// Does not append the separator if the path already ends with it. /// /// The path to append to /// The path with the directory separator appended public static string AppendDirSeparator(string path) { return AppendDirSeparator(path, DirectorySeparatorString); } /// /// Appends the specified directory separator to paths. /// Does not append the separator if the path already ends with it. /// /// The path to append to /// The directory separator to use /// The path with the directory separator appended public static string AppendDirSeparator(string path, string separator) { return !path.EndsWith(separator, StringComparison.Ordinal) ? path + separator : path; } /// /// Guesses the directory separator from the path /// /// The path to guess the separator from /// The guessed directory separator public static string GuessDirSeparator(string path) { return string.IsNullOrWhiteSpace(path) || path.StartsWith("/", StringComparison.Ordinal) ? "/" : "\\"; } } }