2010-06-10 22 views
18

C# dosyasındaki açık dosya iletişim kutusunu kullanırken garip bir davranış buldum. Bu kodu Windows XP'da kullanırsanız, geçerli çalışma dizini seçili dosyanın yoluna değişir, ancak bu kodu Windows 7'da çalıştırırsanız, geçerli çalışma dizini değişmez.Windows XP'de Dosya Aç iletişimini kullanırken geçerli çalışma dizini neden değişiyor?

private void button1_Click(object sender, EventArgs e) 
    {    
     MessageBox.Show(string.Format("Current Directory {0}",Directory.GetCurrentDirectory()), "My Application",MessageBoxButtons.OK, MessageBoxIcon.Asterisk); 
     DialogResult result = openFileDialog1.ShowDialog(); // Show the dialog and get result. 
     if (result == DialogResult.OK) 
     { 

     } 
     MessageBox.Show(string.Format("Current Directory {0}", Directory.GetCurrentDirectory()), "My Application", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); 
    } 

Bu davranışın nedenini bilen var mı? Geçerli dizin neden XP'de ve Windows 7'da değil?

cevap

15

Açıklamanıza bağlı olarak, RestoreDirectory özelliğinin varsayılan değeri XP ve Windows7 arasında farklıdır. Bunun neden böyle olacağından emin değilim, ancak kodunuzdaki değeri açıkça belirleyerek bu sorunu çözebilirsiniz. Bunu true olarak ayarlamak, diyaloğu kapatırken dizini geri yükleyecektir.

+0

Yanıtladığınız için, sorunun nasıl giderileceğini gerçekten biliyordum. Sadece bu davranışın nedenini bilmek istiyorum. – RRUZ

+0

@RRUZ, kendimi merak ediyorum. Reflektördeki kodları kazarak Vista (HandleVistaFileOK) için özel bir yöntem görüyorum. Şüphelerim bu yöntemden sorumludur ama bir kez daha neden sorusuna cevap vermiyor. – JaredPar

10

FileDialog (OpenFileDialog'un temel sınıfı), iletişim kutusunun Vista'da ve daha yeni işletim sistemlerinde kullanıma sunulduğunda yeni dosya iletişim kutularından yararlanıp yararlanmadığını denetleyen AutoUpgradeEnabled adlı bir özelliğe sahiptir. (Dahili olarak bu, GetOpenFileName öğesini comdlg32 veya IFileDialog arabiriminde kullanma arasındaki farktır).

Bunu yapmanın nedeni, yeni diyalogların "yerler" çubuğu gibi birçok özelliği desteklemesidir (CustomPlaces koleksiyonuna bakın). Bunun beklenmedik bir yan etkisi, eski IFileDialog uygulamasının geçerli dizini değiştirmezken, daha eski sürümünün yaptığıdır.

Bu

dosya iletişim uygulamasında bir hata olduğunu ve yeni dosya iletişim işlevini kullanmak istemiyorsanız

, yapılacak en kolay şey ayarlamaktır RestoreDirectory özelliğinin değerine bakılmaksızın olur AutoUpgradeEnabled false.

İlgili konular