ROS&C++文件操作——获取当前工作路径的几种方法
【摘要】 1.采用GetCurrentDirectory,用于获取当前进程的当前目录CString FilePathName; char path[MAX_PATH]; CFileDialog dlg(TRUE); //保存当前路径 GetCurrentDirectory(MAX_PATH,path); // 文件目录保存在path这个字符数组中, if (dlg.DoModal()==IDOK) /...
1.采用GetCurrentDirectory,用于获取当前进程的当前目录
CString FilePathName;
char path[MAX_PATH];
CFileDialog dlg(TRUE);
//保存当前路径
GetCurrentDirectory(MAX_PATH,path); // 文件目录保存在path这个字符数组中,
if (dlg.DoModal()==IDOK) // 在这里,用文件对话框成功打开一个文件后,该目录就被修改为被打开的文件所在目录了
{
FilePathName=dlg.GetPathName();
system.setReplayFile(FilePathName); // 实际上是把这个文件名保存在CDataRecord类的 readFileDir 这个成员变量里
}
else
{
}
//恢复当前路径
SetCurrentDirectory(path); // 使目录重新恢复成了path这个目录
2.getcwd获取当前工作目录,类似上一方法
#include <direct.h>
#include <stdio.h>
char buffer[MAX_PATH];
getcwd(buffer, MAX_PATH);
运行得到"D:<项目名><项目名>"
- 获取上一级目录如:
string path = "D:\\newmap_build\\newmap_addressquery_proj\\Debug\\dict";
int npos = path.find_last_of("\\");
string subpath = path.substr(0,npos);
//结果subpath = D:\\newmap_build\\newmap_addressquery_proj\\Debug;
2.获取文件的类型如:
string path = "D:\\newmap_build\\newmap_addressquery_proj\\Debug\\dict.shp";
int npos = path.find_last_of(".");
string filename = path.substr(npos,path.length());
//结果subpath = .shp;
3.采用GetModuleFileName,用于获取所在exe/dll所在路径下的目录
TCHAR szPath[_MAX_PATH]={0};
TCHAR szDrive[_MAX_DRIVE]={0};
TCHAR szDir[_MAX_DIR]={0};
TCHAR szFname[_MAX_FNAME]={0};
TCHAR szExt[_MAX_EXT]={0};
GetModuleFileName(NULL,szPath,sizeof(szPath));
ZeroMemory(g_wszProgramPath,sizeof(g_wszProgramPath));
_wsplitpath_s(szPath, szDrive, szDir, szFname, szExt);
wsprintf(g_wszProgramPath,_T("%s%s"), szDrive, szDir);
第二种获取写法
CString path;
GetModuleFileName(NULL,path.GetBufferSetLength(MAX_PATH+1),MAX_PATH);
path.ReleaseBuffer();
int pos = path.ReverseFind('\\');
path = path.Left(pos);
运行得到 “D:<项目名>\x64\Debug”
如果需要获取DLL所在路径,则在GetModuleFileName函数中第一个参数传入DLL对应的Module Handle,
这个Handle的获取:将DllMain中的hinstDLL保存(可以用全局变量保存),然后作为第一个参数传给GetModuleFileName
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
其中,hModule可以通过如下方式获取
HMODULE h = GetModuleHandle("TestLibrary.dll");
- ROS 环境中可以使用
ros::package::getPath
来实现类似的C++路径获取
#include<ros/package.h>
std::string fisheye_setting = ros::package::getPath("real_sense_multi");
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)