Artikel ini adalah artikel cermin dari terjemahan mesin, silakan klik di sini untuk melompat ke artikel aslinya.

Melihat: 31124|Jawab: 2

[Program Konsol] Waspadalah terhadap System.Environment.CurrentDirectory untuk mendapatkan direktori saat ini

[Salin tautan]
Diposting pada 10/11/2020 15.04.17 | | | |
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.




Mantan:Perbandingan flanel dan belacu jaringan K8S
Depan:C# menempatkan DLL pustaka referensi ke dalam subfolder melalui pemeriksaan
 Tuan tanah| Diposting pada 10/11/2020 15.08.26 |
C# adalah kumpulan metode untuk mendapatkan jalur berjalan program saat ini

Dapatkan jalur lengkap ke proses saat ini, termasuk nama file (nama proses).
string str = ini. GetType(). Perakitan.Lokasi;
result: X:\xxx\xxx\xxx.exe (.exe文件所在的目录+.exe文件名)

Jalur lengkap ke modul utama yang mendapatkan komponen Proses baru dan mengaitkannya dengan proses yang saat ini aktif, termasuk nama file (nama proses).
string str = System.Diagnostics.Process.GetCurrentProcess(). MainModule.FileName;
result: X:\xxx\xxx\xxx.exe (.exe文件所在的目录+.exe文件名)

//获取和设置当前目录(即该进程从中启动的目录)的完全限定路径。
string str = System.Environment.CurrentDirectory;
result: X:\xxx\xxx (.exe文件所在的目录)

Mendapatkan direktori dasar domain aplikasi saat ini dari Thread saat ini, yang digunakan oleh pemecah konflik perakitan untuk menyelidiki rakitan.
string str = System.AppDomain.CurrentDomain.BaseDirectory;
result: X:\xxx\xxx\ (.exe文件所在的目录+"\")

Dapatkan dan atur nama direktori yang berisi aplikasi. (Direkomendasikan)
string str = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase;
result: X:\xxx\xxx\ (.exe文件所在的目录+"\")

Dapatkan jalur ke file yang dapat dieksekusi yang memulai aplikasi, tidak termasuk nama yang dapat dieksekusi.
string str = System.Windows.Forms.Application.StartupPath;
result: X:\xxx\xxx (.exe文件所在的目录)

//获取启动了应用程序的可执行文件的路径,包括可执行文件的名称。
string str = System.Windows.Forms.Application.ExecutablePath;
result: X:\xxx\xxx\xxx.exe (.exe文件所在的目录+.exe文件名)

Dapatkan direktori kerja aplikasi saat ini (tidak dapat diandalkan).
string str = System.IO.Directory.GetCurrentDirectory();
result: X:\xxx\xxx (.exe文件所在的目录)
Diposting pada 22/09/2021 20.38.52 |
Belajar untuk belajar...
Sanggahan:
Semua perangkat lunak, materi pemrograman, atau artikel yang diterbitkan oleh Code Farmer Network hanya untuk tujuan pembelajaran dan penelitian; Konten di atas tidak boleh digunakan untuk tujuan komersial atau ilegal, jika tidak, pengguna akan menanggung semua konsekuensi. Informasi di situs ini berasal dari Internet, dan sengketa hak cipta tidak ada hubungannya dengan situs ini. Anda harus sepenuhnya menghapus konten di atas dari komputer Anda dalam waktu 24 jam setelah pengunduhan. Jika Anda menyukai program ini, harap dukung perangkat lunak asli, pembelian pendaftaran, dan dapatkan layanan asli yang lebih baik. Jika ada pelanggaran, silakan hubungi kami melalui email.

Mail To:help@itsvse.com