C++ 根据文件路径获取它的目录
【摘要】 在 C++ 中,如果你有一个使用 TCHAR[] 存储的文件路径,并且你希望获取该路径的目录部分,你可以使用 Windows API 函数 _tsplitpath 和 _tmakepath 来实现这一点。这些函数是 tchar.h 头文件的一部分,并且会根据你的项目设置(ANSI 或 Unicode)自动选择正确的版本。以下是一个示例代码,展示了如何获取 TCHAR[] 路径的目录部分:#i...
在 C++ 中,如果你有一个使用 TCHAR[]
存储的文件路径,并且你希望获取该路径的目录部分,你可以使用 Windows API 函数 _tsplitpath
和 _tmakepath
来实现这一点。这些函数是 tchar.h
头文件的一部分,并且会根据你的项目设置(ANSI 或 Unicode)自动选择正确的版本。
以下是一个示例代码,展示了如何获取 TCHAR[]
路径的目录部分:
#include <windows.h>
#include <tchar.h>
#include <iostream>
void GetDirectoryFromPath(const TCHAR* path, TCHAR* directory, size_t directorySize) {
// Variables to hold the split components of the path
TCHAR drive[_MAX_DRIVE];
TCHAR dir[_MAX_DIR];
TCHAR fname[_MAX_FNAME];
TCHAR ext[_MAX_EXT];
// Split the path into its components
_tsplitpath(path, drive, dir, fname, ext);
// Combine the drive and directory parts to form the full directory path
_tmakepath(directory, drive, dir, NULL, NULL);
// Ensure the directory ends with a backslash (if it's not the root)
size_t len = _tcslen(directory);
if (len > 0 && directory[len - 1] != _T('\\')) {
if (len < directorySize - 1) {
_tcscat(directory, _T("\\"));
} else {
// Buffer is too small to add backslash
// Handle error or truncate as needed
directory[directorySize - 1] = _T('\0');
}
}
}
int main() {
// Example path
TCHAR path[] = _T("C:\\Users\\Example\\Documents\\file.txt");
TCHAR directory[_MAX_PATH];
// Get the directory part of the path
GetDirectoryFromPath(path, directory, _MAX_PATH);
// Print the directory
_tprintf(_T("Directory: %s\n"), directory);
return 0;
}
说明:
-
包含头文件:
#include <windows.h>
:包含 Windows API 的定义。#include <tchar.h>
:包含TCHAR
类型的定义和_tsplitpath
、_tmakepath
函数。#include <iostream>
:用于控制台输出(尽管在这个例子中我们使用的是_tprintf
)。
-
GetDirectoryFromPath 函数:
- 接收一个
TCHAR
类型的路径和一个用于存储目录的TCHAR
数组,以及该数组的大小。 - 使用
_tsplitpath
将路径分割为驱动器、目录、文件名和扩展名。 - 使用
_tmakepath
将驱动器和目录部分重新组合成完整的目录路径。 - 确保目录字符串以反斜杠结尾(除非它是根目录)。
- 接收一个
-
main 函数:
- 定义一个示例路径。
- 调用
GetDirectoryFromPath
函数获取目录部分。 - 使用
_tprintf
打印目录。
注意事项:
_MAX_PATH
是一个预定义的常量,表示路径的最大长度。_tsplitpath
和_tmakepath
是处理TCHAR
字符串的泛型函数,会根据项目设置处理 ANSI 或 Unicode 字符串。- 确保目标数组
directory
足够大以存储结果字符串。在这个例子中,我们使用_MAX_PATH
来确保足够的空间。
这种方法在 Windows 平台上非常有效,但如果你需要跨平台解决方案,可能需要考虑使用 Boost.Filesystem 或 C++17 的 <filesystem>
库。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)