VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 992|回复: 4

[原创] VC++实现易语言取运行目录

[复制链接]
24_avatar_middle
在线会员 发表于 2016-4-12 14:07:21 | 显示全部楼层 |阅读模式
函数原型:

  1. GetCurrentDirectoryW(
  2.     __in DWORD nBufferLength,
  3.     __out_ecount_part_opt(nBufferLength, return + 1) LPWSTR lpBuffer
  4.     );
复制代码

例子:

  1. TCHAR pBuf[MAX_PATH] = {0};
  2. GetCurrentDirectory(MAX_PATH,pBuf);
  3. CString Cstr(pBuf);
复制代码




上一篇:C语言循环的实现
下一篇:vc打包部署
51_avatar_middle
online_admins 发表于 2016-4-12 14:11:20 | 显示全部楼层
GetCurrentDirectory 有时候取得的结果不一定正确哦
比如当你先调用 CFileDialog 保存了一个文件,之后再调用 GetCurrentDirectory 的时候结果就不同喽,所以这里也算是给楼主出一个小题,如何自己实现一个类似 GetCurrentDirectory 功能的函数?
17_avatar_middle
online_supermod 发表于 2016-4-12 16:27:22 | 显示全部楼层
SYC老大说得没错,用这个函数~~

  1. /************************************************************************/
  2. /* 函数说明:获取Exe所在路径
  3. /* 函数参数:无
  4. /* 返 回 值:CString
  5. /* 备注信息:无
  6. /************************************************************************/
  7. CString GetExePath()
  8. {
  9.         char pathbuf[MAX_PATH] = {0x00};
  10.         int  pathlen                   = 0;
  11.        
  12.         pathlen = GetModuleFileName(NULL,pathbuf,MAX_PATH);
  13.         while(TRUE)
  14.         {
  15.                 if(pathbuf[pathlen--]=='\\')
  16.                         break;
  17.         }
  18.         pathbuf[++pathlen]=   0x0;
  19.         CString  fname = pathbuf;
  20.         return   fname;
  21. }
复制代码
22_avatar_middle
在线会员 发表于 2016-4-14 17:15:29 | 显示全部楼层
Koma 发表于 2016-4-12 16:27
SYC老大说得没错,用这个函数~~

不够严谨哦,没考虑到UNICODE,我常用的如下
string GetAppPathA()
{
        char szFilePath[MAX_PATH] = {0}, szDrive[MAX_PATH] = {0}, szDir[MAX_PATH] = {0}, szFileName[MAX_PATH] = {0}, szExt[MAX_PATH] = {0};
        GetModuleFileNameA(NULL, szFilePath, sizeof(szFilePath));
        _splitpath_s(szFilePath,szDrive,szDir,szFileName,szExt);

        string str(szDrive);
        str.append(szDir);
        return str;
}

wstring GetAppPathW()
{
        wchar_t wszFilePath[MAX_PATH] = {0}, wszDrive[MAX_PATH] = {0}, wszDir[MAX_PATH] = {0}, wszFileName[MAX_PATH] = {0}, wszExt[MAX_PATH] = {0};
        GetModuleFileNameW(NULL, wszFilePath, sizeof(wszFilePath));
        _wsplitpath_s(wszFilePath,wszDrive,wszDir,wszFileName,wszExt);

        wstring str(wszDrive);
        str.append(wszDir);
        return str;
}
22_avatar_middle
在线会员 发表于 2016-4-14 17:32:32 | 显示全部楼层
Koma 发表于 2016-4-12 16:27
SYC老大说得没错,用这个函数~~

还有个大问题,没有考虑到程序在根目录情况,执行结果如下:
VC++实现易语言取运行目录
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2019-4-20 21:21

Powered by Discuz! X3.4

© 2009-2019 cctry.com

快速回复 返回顶部 返回列表