使用boost库获取应用程序的所在目录
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow
也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!
作者:朱金灿
来源:http://blog.csdn.net/clever101/
在Windows平台下我们知道可以使用API函数GetModuleFileName来获取应用程序的路径。最近发现boost库也可以实现这个功能,个人感觉用起来更方便。
用法很简单,具体代码如下:
- #include <iostream>
- using std::cout;
- #include <string>
- using std::string;
- #include "boost/algorithm/string.hpp"
- #include "boost/filesystem/path.hpp"
- #include "boost/filesystem/operations.hpp"
- #include "boost/format.hpp"
- int main(int argc, _TCHAR* argv[])
- {
- string fullpath = boost::filesystem::initial_path<boost::filesystem::path>().string();
- cout<<fullpath;
- system("PAUSE");
- return 0;
- }
我是使用VS 2008(带sp1)编译这个程序的。值得注意的是要顺利获取exe的路径,还得在VS 中将工作目录设置为应用程序的输出路径,如下图:
否则获取的就不是正确的应用程序路径了(貌似是当前目录路径,不过这个我没有验证)。其它编译器要做何设置有待其它同学研究。
注意,使用boost库的这种方法获取的是应用程序所在的目录,而使用API函数GetModuleFileName获取的是应用程序的全路径,如boost方法获取的是e:/BoostLearn/outdir/Debug,而API函数GetModuleFileName获取的是e:/BoostLearn/outdir/debug/BoostBind.exe(你可以看到boost获取的路径用的是'/',而GetModuleFileName用的是'/',可以肯定的是这个只是形式不一样,都是正确的路径)。
在实际中我们常常需要的只是应用程序所在的目录,而使用API函数GetModuleFileName获取的是应用程序的全路径还要对字符串进行分割,所以我说boost库的方法更方便。另外一个不确定的好处是这会不会是一种跨平台的获取应用程序路径的做法。