Menentukan Direktori Semasa
Dalam C , mendapatkan direktori semasa yang boleh laku dijalankan boleh menjadi penting untuk tugas seperti mencipta fail atau mengurus sumber . Walau bagaimanapun, menggunakan GetCurrentDirectory() boleh membawa kepada pengecualian seperti yang ditunjukkan dalam contoh yang disediakan.
Menangani Pengecualian
Isu timbul kerana GetCurrentDirectory() menjangkakan penimbal yang sah untuk simpan laluan direktori semasa. Dalam kod yang disediakan, NPath pada mulanya ditetapkan kepada NULL. Menetapkan penuding NULL kepada fungsi GetCurrentDirectory() menyebabkan pengecualian.
Pendekatan Alternatif
Daripada menggunakan GetCurrentDirectory(), beberapa kaedah lain boleh digunakan untuk mendapatkan direktori semasa:
1. GetModuleFileName:
Untuk mendapatkan semula laluan boleh laku, yang termasuk kedua-dua direktori dan nama fail, gunakan GetModuleFileName():
TCHAR buffer[MAX_PATH] = { 0 }; GetModuleFileName(NULL, buffer, MAX_PATH);
2. Mengekstrak Laluan Direktori daripada Laluan Boleh Laku:
Setelah laluan boleh laku diperoleh, anda boleh mengekstrak laluan direktori dengan mencari kejadian terakhir "" atau "/" dalam laluan:
std::wstring::size_type pos = std::wstring(buffer).find_last_of(L"\/"); std::wstring directoryPath = std::wstring(buffer).substr(0, pos);
Ini menyediakan laluan direktori tanpa nama fail.
Contoh Fungsi:
Berikut ialah contoh fungsi yang mengembalikan laluan direktori boleh laku:
#include <windows.h> #include <string> std::wstring ExePath() { TCHAR buffer[MAX_PATH] = { 0 }; GetModuleFileName(NULL, buffer, MAX_PATH); std::wstring::size_type pos = std::wstring(buffer).find_last_of(L"\/"); return std::wstring(buffer).substr(0, pos); }
Penggunaan:
std::cout << "Current directory: " << ExePath() << std::endl;
Dengan menggunakan pendekatan alternatif ini, anda boleh mendapatkan direktori semasa dengan berkesan dan mengelakkan pengecualian yang berkaitan dengan GetCurrentDirectory().
Atas ialah kandungan terperinci Bagaimana untuk Mengelakkan Pengecualian Apabila Mendapatkan Direktori Semasa dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!