いつもお世話になっています。
VS2005でWindowsアプリケーション作成を行っています。
今回、フルパス名を仮に
szPath = "c:\Test\Debug\test.exe"
とした場合、最後の"test.exe"を取り出すためには、
_splitpath(szPath, drive, dir, name, ext);
_makepath(path, drive, dir, NULL, NULL);
としますが、"Debug\test.exe"を取りたい場合も、
上記の関数を使ってできるのでしょうか?
ご教授お願いいたします。
No.2ベストアンサー
- 回答日時:
shlwapi.hの関数を使うとこんな感じ。
TCHAR szFilePath[MAX_PATH];
TCHAR szFileName[_MAX_FNAME + _MAX_EXT];
TCHAR szParentDirPath[_MAX_DIR];
TCHAR szParentDirName[_MAX_FNAME];
TCHAR szTargetPath[_MAX_PATH];
// 自分自身のフルパス(サンプル用)
::GetModuleFileName(NULL, szFilePath, _countof(szFilePath));
// ファイル名を取得
lstrcpy(szFileName, ::PathFindFileName(szFilePath));
// ファイル名を除いたパスを取得
lstrcpy(szParentDirPath, szFilePath);
::PathRemoveFileSpec(szParentDirPath);
// ルート以外なら親ディレクトリがある
if (!::PathIsRoot(szParentDirPath))
{
// 親ディレクトリ名を取得
lstrcpy(szParentDirName, ::PathFindFileName(szParentDirPath));
// ファイル名と結合
::PathCombine(szTargetPath, szParentDirName, szFileName);
}
// ルートの場合は親ディレクトリがないが・・・?
else
{
// 一応ファイル名だけ
lstrcpy(szTargetPath, szFileName);
}
No.4
- 回答日時:
「パスを除いてファイル名だけにする」は出来ますね?
では「ファイル名を除いてパスだけにする」は出来ますか?
そして「ファイル名を除いてパスだけにした物の、末尾の¥を取り除く」のは出来ますか?
それが出来れば
c:\Test\Debug\test.exe
から
c:\Test\Debug\
を作り、それから
c:\Test\Debug
を作るのは可能ですね?
では
c:\Test\Debug
から
Debug
を取り出すのは?
これは
c:\Test\Debug\test.exe
から
test.exe
を取り出すのと同じです。
「Debug」を取り出せて「test.exe」も取り出せるなら、あとは
Debug + "\\" + test.exe
を行えば
Debug\test.exe
が出来ます。
大変遅くなり申し訳ありません。
皆様、ご回答ありがとうございました。
皆様のおかげで、"Debug\test.exe"を取り出すことができましたので
まとめてchie65535さんのお礼欄にお礼を申し上げます。
chie65535さんごめんなさい。
これからもC++がんばっていきます。
chie65535さんをはじめbluecampusさんとreset_catさん、
本当にありがとうございました。
No.1
- 回答日時:
あまりきれいなやり方ではないですが、必ず1つ上の階層を指定したいのであれば、以下のような方法が使えるかもしれません。
_splitpath(szPath, drive, dir, name, ext);
strcat(dir, "..\\");
_makepath(path, drive, dir, NULL, NULL);
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA GetAttrについて教えてください 2 2022/12/22 15:25
- Excel(エクセル) 複数のブックをひとつのブック(複数のシートにまとめる)場合にシートとの順番について 5 2022/12/28 20:47
- JavaScript [再掲]指定したパスが現URLに含まれていたら特定要素を削除するJavascriptのコードについて 1 2023/05/10 15:09
- サーバー Windowsサーバでグループを検索したい 1 2023/04/17 15:30
- MySQL 次の時間帯の勝率の合計を求めるSQL文 1 2023/07/04 17:12
- PHP $_SESSIONについて教えて下さい。 2 2023/03/02 09:18
- その他(プログラミング・Web制作) VScodeでpythonプログラムの関数を実行したい 2 2022/07/13 19:24
- Visual Basic(VBA) Excel VBA でデータ転記について 1 2023/03/07 19:11
- Visual Basic(VBA) シートをコピーする下記記述でダイアログを用いた記述がわかりません?( A = Dir(ThisWor 4 2022/08/22 12:26
- Windows 10 Windows11の実行モジュールはどこにある 1 2022/05/31 07:33
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バッチファイル 二つ上のディ...
-
エクセルvbaでdocuworksprinter...
-
Excel 相対パス
-
パスワード保護されたExcelファ...
-
ExcelVBAの使い方 ¥の使い方...
-
C#でのProcess.Startと変数path
-
xcopyコマンドの進行状況を表示...
-
Eclipse
-
AccessからExcel最小化
-
実行ファイルのパスを取得したい
-
エクセルのファイルオープン時...
-
SaveAsの保存先について
-
Cの関数で自分自身のパス取得
-
【VBA】ExcelマクロでCSVファイ...
-
エクセルの二重起動をやめたい
-
MultiValueMapの使い方を教えて...
-
header(Location)で相対URL...
-
A列に記載されているフォルダ...
-
【VB.NET】App.configにファイ...
-
初心者powershellのPS1ファイル...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッチファイル 二つ上のディ...
-
エクセルvbaでdocuworksprinter...
-
Excel 相対パス
-
エクセルVBAで一つ上の階層...
-
xcopyコマンドの進行状況を表示...
-
初心者powershellのPS1ファイル...
-
【VB.NET】App.configにファイ...
-
【VBA】ExcelマクロでCSVファイ...
-
エクセルのマクロで特定フォル...
-
VBA★PDFをPDFアプリで印刷し...
-
パスワード保護されたExcelファ...
-
SaveAsの保存先について
-
ExcelVBAの使い方 ¥の使い方...
-
Windows PowerShellでscoopコマ...
-
開いているファイルを削除し、...
-
VBS パスに変数を入れたい
-
C#でのProcess.Startと変数path
-
コマンドプロンプトのコピー関...
-
EXCEL(VBA)で指定フォルダ内の...
-
実行ファイルのパスを取得したい
おすすめ情報