战魂小筑

讨论群:309800774 知乎关注:http://zhihu.com/people/sunicdavy 开源项目:https://github.com/davyxu

   :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  257 随笔 :: 0 文章 :: 506 评论 :: 0 Trackbacks
   VC有个让新手抓狂的地方, 把工程路径作为调试模式时的进程当前目录. 

估计很多新手因为打不开文件而耗费大量的时间,甚至放弃

以前使用纯Windows方式解决这种问题:

   1:  #include <Shlwapi.h>
   2:  #include <shlobj.h>
   3:   
   4:  #pragma comment(lib,"shlwapi.lib")
   5:   
   6:  wchar_t exename[MAX_PATH];
   7:  ::GetModuleFileName(NULL,exename,MAX_PATH);
   8:  ::PathRemoveFileSpec( exename );
   9:  ::SetCurrentDirectory( exename );

需要跨平台时,可以这样写:

   1:  #include <direct.h>
   2:  #include <boost/filesystem.hpp>
   3:   
   4:  int main(int argc, char* argv[])
   5:  {    
   6:      _chdir( boost::filesystem::path( argv[0] ).remove_filename().string().c_str() );        
   7:  }

     被Windows惯坏了, 到处找Linux或者boost版本的GetModuleFileName, 结果忘记了当年c语言课上教的命令行传入参数...
posted on 2011-12-01 11:28 战魂小筑 阅读(1883) 评论(6)  编辑 收藏 引用 所属分类: 网络 服务器技术操作系统

评论

# re: 设置进程路径为启动路径 2011-12-01 16:03 ding
argv[0]  回复  更多评论
  

# re: 设置进程路径为启动路径 2011-12-02 08:30 周星星
项目属性 的 Debuggin 中设置 Working Directory 为 $(OutDir)\  回复  更多评论
  

# re: 设置进程路径为启动路径 2011-12-02 08:50 hyp
argv[0]不一定是路径也可能是程序名。  回复  更多评论
  

# re: 设置进程路径为启动路径[未登录] 2011-12-02 12:00 cexer
当使用CreateProcess传入命令行参数的时候,argv[0]可以是任何值,不一定是程序路径或程序名。  回复  更多评论
  

# re: 设置进程路径为启动路径 2011-12-02 14:59 right
LZ舍易取难,我来山寨一个,项目属性 的 Debugging 中设置 Working Directory 为 $(TargetDir)  回复  更多评论
  

# re: 设置进程路径为启动路径 2011-12-12 11:48 战魂小筑
@周星星@right
我为的就是不需要每个工程都这样设置,麻烦. 而且经常为配置读不到的问题,找半天
开发上的一个小技巧,节约n人*n秒的时间
  回复  更多评论
  


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理