سؤال

لماذا يقوم OpenFiledialog بتغيير دليل عملي؟ يجب أن أفترض العديد من func في system.windows.forms سيغير دليل عملي؟

    OpenFileDialog open = new OpenFileDialog();
    open.Filter = filter;
    a = Directory.GetCurrentDirectory(); //<-- correct
    if (open.ShowDialog() == DialogResult.OK) //-- select a file on my desktop
    {
        a = Directory.GetCurrentDirectory(); //<-- incorrect, is set to my desktop
هل كانت مفيدة؟

المحلول

أو يمكنك أن تجعل ذلك لا تفعل ذلك. انظر filedialog.restoredirectory. خاصية.

نصائح أخرى

ما اكتشفناه في مشروع حالي هو أن OpenFileDialog لم يعد يغير الدليل الحالي، مما يجعل العقار .restoredirectory قديمة. الرمز في التطبيق المستخدم لتغيير الدليل الحالي كلما فتحنا ملف (عند تشغيله في نظام التشغيل Windows XP). لم تعد كذلك في نظام التشغيل Windows 7. ونتيجة لذلك، فقد كسر تطبيقنا لأن DataSet لدينا الآن لا تعرف دليل الملف عند محاولة التحيز باستخدام اسم الملف دون المسار الكامل. مجرد كلمة تحذير إذا كنت تخطط للهجرة إلى Windows 7.

إنه ألم، على الرغم من أنه في بعض الطرق قد تتوقعه ... إذا ذهبت إلى مربع حوار مفتوح عدة مرات (في تطبيق)، فغالبا ما تجدها أين تركتها.

إذا كان ذلك يؤثر على التعليمات البرمجية الخاصة بك، فيمكنك التقاط لقطة GetCurrentDirectory() قبل الدخول إلى مربع الحوار، واستعادة ذلك بعد ذلك (حتى لا يرى الكود الخاص بك التغيير). قد ترغب في تخزين المستخدم من دليل العمل بشكل منفصل (وادعمهم) بحيث يحصل المستخدم أيضا على سلوكهم المتوقع.

يمكن أن يتغير دليل العمل الحالي أثناء وقت التشغيل، نعم.

فكر في استخدام

Directory.GetParent(Assembly.GetExecutingAssembly().Location)

أو

System.AppDomain.CurrentDomain.BaseDirectory

عندما تحتاج إلى دليل التطبيقات الخاص بك.

لهذا السبب في XP Filedialog تغيير الدليل الحالي، من الأفضل أن تسأل MS. على أي حال يحتوي مربع حوار الملف المفتوح في XP على هذا السلوك الغريب، ولكن في W7 أو أعلى لا. لذلك يمكنك ببساطة تعيين الدليل الحالي بعد حفظ المسار المحدد من SaveFileDialog Taht، قم بتغيير الدليل الحالي.

أنا نشر طريقتي حيث يمكنك أن ترى أن المسار المفاوض يتم حفظه لإعدادات وإعادة تعيين الدليل الحالي

 private void ShowSaveFileDialog(object sender, RoutedEventArgs e)
    {    
        private const int xpVerMajorNumber = 5;        
        var saveFileDialog = new SaveFileDialog()
        {                
            FileName = Settings.Default.ExcelFileName,
            DefaultExt = "*.xlsx",
            Filter = "Excel Workbook (.xlsx)|*.xlsx"
        };

        if (saveFileDialog.ShowDialog(this) == true)
            Settings.Default.ExcelFileName = saveFileDialog.FileName;


         if (Environment.OSVersion.Version.Major <= xpVerMajorNumber)
        {
       Directory.SetCurrentDirectory(System.AppDomain.CurrentDomain.BaseDirectory);
        }

    }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top