Dalam pekerjaan saya baru-baru ini, saya ingin membuat alat kecil untuk pengingat klien; Secara alami, program winform harus membaca file konfigurasi direktori yang sama dengan aplikasi (bukan file exe.config);
Untuk membaca direktori tempat aplikasi saat ini berada, saya langsung memikirkan System.Environment.CurrentDirectory untuk mendapatkan direktori kerja saat ini. Program ini tampaknya berjalan dengan sempurna;
Ketika saya datang ke tempat kerja keesokan paginya, itu muncul: "Baca file konfigurasi hilang". Aplikasi ini menambahkan boot auto-start. Pesan ini muncul untuk membaca kegagalan file konfigurasi, segera periksa apakah file konfigurasi di direktori aplikasi telah dihapus dengan sendirinya. Setelah memeriksa, saya menemukan bahwa file masih ada, dan saya keluar dari program dan menjalankannya lagi
Masih baik-baik saja, tidak ada profil baca pop-up yang hilang. Kemudian lihat apakah jalur entri boot di registri tidak ada di direktori saya? Melihat file jalur, tidak apa-apa. Sedikit bingung? Keluar dari komputer dan coba mulai ulang masih muncul file konfigurasi hilang. Alasan tidak dapat menemukan jalan akan diambil secara langsung
MessageBox, program berjalan dan menemukan bahwa jalurnya memang jalur ini.
Tambahkan kode MessageBox dan lanjutkan untuk mem-boot pengujian. Ketika saya booting, saya menemukan bahwa direktori saat ini yang muncul adalah C:\Windows\System32, dan saya langsung bingung. Saya berpikir, mungkinkah program Lao Tzu berjalan ke sistem32? Memeriksa registri dan sysetm32 tidak memiliki aplikasi saya. Akhirnya, saya berpikir bahwa harus ada masalah dengan kode untuk mendapatkan jalurnya.
Setelah pengujian berulang, ditemukan bahwa System.Environment.CurrentDirectory memang untuk mendapatkan direktori saat ini, tetapi jika program A memanggil program B dan program B menggunakan System.Environment.CurrentDirectory untuk mendapatkan direktori. Kemudian direktori yang diperoleh dalam program B bukan lagi direktori tempat aplikasi B berada; Ini menjadi direktori tempat A berada. Tidak sulit untuk menemukan bahwa direktori yang muncul saat saya boot adalah C:\Windows\System32 karena program startup mandiri boot juga disebut oleh proses di Windows.
Oleh karena itu, jika program winform ingin mendapatkan direktori tempat aplikasi saat ini berada, sebaiknya tidak menggunakan System.Environment.CurrentDirectory. Sebaliknya, itu adalah: Application.StartupPath Dengan cara ini, tidak masalah siapa yang memanggilnya.
Kode pengujian:
Ditransfer dari:Login hyperlink terlihat.
|