Windows APIに基づいてパス問題を分解する詳細

873 ワード

多くのコードでは、パス文字列のファイル名または拡張子を取得する必要があるため、多くのプログラマがcライブラリの文字列検索関数を使用して取得していることがわかります.このようにコードがたくさん書かれていて、面倒です.
実はVCでは、より良い方法で入手できます.特に説明はありませんが、コードは以下の通りです.
 
  
    LPTSTR szfileName = new TCHAR[MAX_PATH];

    GetModuleFileName(NULL, szfileName , MAX_PATH);

    // 、 、
    wchar_t drive[_MAX_DRIVE];
    wchar_t dir[_MAX_DIR];
    wchar_t fname[_MAX_FNAME];
    wchar_t ext[_MAX_EXT];
    errno_t err;
    err = ::_wsplitpath_s(szFileName, drive, _MAX_DRIVE, dir, _MAX_DIR,
        fname, _MAX_FNAME, ext, _MAX_EXT);
    //
    PathRemoveFileSpec(szFileName);

注意:wsplitpath_s関数はszFileNameの内容を変更しませんが、PathRemoveFileSpecは変更します.
ヘッダファイル:wsplitpath_s()はstdlib.h中.
PathRemoveFileSpec()関数はshlwapi.h中.