Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Mengelakkan Pengecualian Apabila Mendapatkan Direktori Semasa dalam C ?

Bagaimana untuk Mengelakkan Pengecualian Apabila Mendapatkan Direktori Semasa dalam C ?

Barbara Streisand
Lepaskan: 2024-11-10 21:55:02
asal
821 orang telah melayarinya

How to Avoid Exceptions When Getting the Current Directory in C  ?

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);
Salin selepas log masuk

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);
Salin selepas log masuk

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);
}
Salin selepas log masuk

Penggunaan:

std::cout << "Current directory: " << ExePath() << std::endl;
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan