Clever-1945
12/1/2017 - 5:05 AM

путь и папка приложения #CSharp

путь и папка приложения #CSharp

    /// <summary> Класс помошник для текущего приложения </summary>
    public class Assistant
    {
        /// <summary> Возвращает полный путь до текушего приложения </summary>
        public static string ApplicationFileName
        {
            get
            {
                lock (private_ApplicationFileName)
                {
                    if (!String.IsNullOrWhiteSpace(private_ApplicationFileName))
                        return private_ApplicationFileName.Clone() as string;
                    private_ApplicationFileName = Process.GetCurrentProcess().MainModule.FileName;
                    return private_ApplicationFileName.Clone() as string;
                }
            }
        }
        /// <summary> Возвращает полный путь до текушего приложения </summary>
        private static string private_ApplicationFileName = "";

        /// <summary> Возвращает папку, откуда было запущено приложение </summary>
        public static string ApplicationPath
        {
            get
            {
                lock (private_ApplicationPath)
                {
                    if (!String.IsNullOrWhiteSpace(private_ApplicationPath))
                        return private_ApplicationPath.Clone() as string;

                    private_ApplicationPath = Path.GetDirectoryName(ApplicationFileName);
                    return private_ApplicationPath.Clone() as string;
                }
            }
        }
        /// <summary> Возвращает папку, откуда было запущено приложение </summary>
        private static string private_ApplicationPath = "";

        /// <summary> Возвращает файл настроек для текущего приложения </summary>
        public static string SettingsFile
        {
            get
            {
                lock (private_SettingsFile)
                {
                    if (!String.IsNullOrWhiteSpace(private_SettingsFile))
                        return private_SettingsFile.Clone() as string;

                    List<string> listSettingsFile = new List<string>()
                    {
                        Path.Combine(ApplicationPath , "Settings.config"),
                        Path.Combine(ApplicationPath , "..", "..", "Settings.config"),
                    }.Where(x => File.Exists(x)).ToList();
                    private_SettingsFile = listSettingsFile.FirstOrDefault() ?? "";
                    if (String.IsNullOrWhiteSpace(private_SettingsFile))
                        return "";

                    return new FileInfo(private_SettingsFile).FullName;
                }
            }
        }
        /// <summary> Возвращает файл настроек для текущего приложения </summary>
        private static string private_SettingsFile = "";

        /// <summary> Указатель на настройки приложения </summary>
        private static XmlDocument private_Settings { set; get; }
        /// <summary> Блокировщик одновременного дустыпа к private_Settings </summary>
        private static object lock_private_settings = new object();
        /// <summary> Время последней модификации файла настроек </summary>
        private static DateTime last_changed_settings = new DateTime();

        /// <summary> Указатель на настройки приложения </summary>
        public static XmlDocument Settings
        {
            get
            {
                lock(lock_private_settings)
                {
                    FileInfo file = new FileInfo(SettingsFile);
                    if (file.LastWriteTime < last_changed_settings && private_Settings != null)
                        return private_Settings;

                    private_Settings = new XmlDocument();
                    private_Settings.Load(SettingsFile);
                    last_changed_settings = DateTime.Now;

                    return private_Settings;
                }
            }
        }
    }