2010-06-10 31 views
18

Tôi đã tìm thấy một hành vi lạ khi sử dụng hộp thoại mở tập tin trong C#.Tại sao thư mục làm việc hiện tại thay đổi khi sử dụng hộp thoại Mở tệp trong Windows XP?

Nếu sử dụng mã này trong Windows XP thư mục làm việc hiện tại thay đổi thành đường dẫn của tệp đã chọn, tuy nhiên nếu bạn chạy mã này trong Windows 7 thư mục làm việc hiện tại không thay đổi.

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); 
    } 

Bất kỳ ai biết lý do của hành vi này? Tại sao thư mục hiện tại thay đổi trong XP chứ không phải trong Windows 7?

Trả lời

15

Dựa trên mô tả của bạn, có vẻ như giá trị mặc định của thuộc tính RestoreDirectory khác nhau giữa XP và Windows7. Tôi không chắc chắn lý do tại sao điều này xảy ra nhưng bạn có thể khắc phục sự cố này bằng cách đặt giá trị trong mã của bạn một cách rõ ràng. Đặt nó thành true sẽ khôi phục thư mục trên hộp thoại gần.

+0

Cảm ơn bạn đã trả lời tôi thực sự biết cách khắc phục sự cố. tôi chỉ muốn biết lý do cho hành vi này. – RRUZ

+0

@RRUZ, tôi rất tò mò. Đào qua mã trong phản xạ tôi thấy một phương pháp đặc biệt cho Vista (HandleVistaFileOK). Nghi ngờ của tôi là phương pháp này có trách nhiệm nhưng một lần nữa nó không thực sự trả lời câu hỏi tại sao. – JaredPar

10

FileDialog (lớp cơ sở của OpenFileDialog) có thuộc tính được gọi là AutoUpgradeEnabled kiểm soát xem hộp thoại có lợi dụng hộp thoại tệp mới hơn được thêm vào trong Vista và hệ điều hành mới hơn khi chúng có sẵn hay không. (Nội bộ này là sự khác biệt giữa việc gọi GetOpenFileName trong comdlg32 hoặc sử dụng giao diện IFileDialog).

Lý do để làm điều này là các hộp thoại mới hơn hỗ trợ một số tính năng như thanh "địa điểm" (xem bộ sưu tập CustomPlaces). Một tác dụng phụ không mong muốn của việc này là việc thực hiện IFileDialog mới hơn không thay đổi thư mục hiện tại trong khi phiên bản cũ hơn đã làm.

Đây là một lỗi trong việc thực hiện hộp thoại tập tin và xảy ra không phụ thuộc vào giá trị tài sản RestoreDirectory

Nếu bạn không muốn sử dụng các chức năng thoại tập tin mới hơn, điều đơn giản nhất để làm là để thiết lập AutoUpgradeEnabled thành false.

Các vấn đề liên quan