wince获取当前路径

《wince获取当前路径》

在wince开发中,若要获取程序的当前路径,方法如下:

m_CurrentPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase);

Directory.GetCurrentDirectory 方法在 .NET Compact Framework 中可用,但是当前并不支持,调用该方法会抛出一个 NotSupportedException 异常。在 Windows CE 下编程,所有的文件名都是从智能手机的根目录算起的。

http://www.cnblogs.com/kakajun/archive/2009/04/09/1432465.html

注:对于在WinCE下获得当前程序的运行目录(.exe)所在的目录,推荐使用后面的提到的GetModuleFileName()函数

--------------------------------------------------------------------------------------------

《Windows API一日一练(83)GetModuleFileName函数》
  在开发软件的过程里,经常需要把数据保存到当前执行文件路径下面,或者读取当前执行文件路径下的一些配置信息。这时就需要从当前模块里获取所在的目录路径,以便进行固定的位置操作文件。要解决这个需求,就需要调用API函数GetModuleFileName来获取模块所在的路径。

函数GetModuleFileName声明如下:
WINBASEAPI
DWORD
WINAPI
GetModuleFileNameA(
  __in_opt HMODULE hModule,
  __out_ecount_part(nSize, return + 1) LPCH lpFilename,
  __in DWORD nSize
  );
WINBASEAPI
DWORD
WINAPI
GetModuleFileNameW(
  __in_opt HMODULE hModule,
  __out_ecount_part(nSize, return + 1) LPWCH lpFilename,
  __in DWORD nSize
  );
#ifdef UNICODE
#define GetModuleFileName GetModuleFileNameW
#else
#define GetModuleFileName GetModuleFileNameA
#endif // !UNICODE
hModule是模块的句柄,或者设置为NULL表示当前模块。
lpFilename是保存路径的缓冲区。
nSize是缓冲区的大小。

调用函数的例子如下:
#001 //获取当前程序所在路径。
#002 //蔡军生 2007/12/05 QQ:9073204 深圳
#003 void TestGetExePath(void)
#004 {
#005 //
#006 const int nBufSize = 512;
#007 TCHAR chBuf[nBufSize];
#008 ZeroMemory(chBuf,nBufSize);
#009 
#010 //获取当前执行文件的路径。
#011 if (GetModuleFileName(NULL,chBuf,nBufSize))
#012 {
#013 //输出带文件名称路径。
#014 OutputDebugString(chBuf);
#015 OutputDebugString(_T("/r/n"));
#016 
#017 //获取文件路径。
#018 TCHAR* lpStrPath = chBuf;
#019 PathRemoveFileSpec(lpStrPath);
#020 OutputDebugString(lpStrPath);
#021 OutputDebugString(_T("/r/n"));
#022 }
#023 
#024 }

输出的结果如下:
g:/work/windows_api/wincpp2/debug/WinCpp.exe
g:/work/windows_api/wincpp2/debug
转自:http://blog.csdn.net/caimouse/archive/2007/12/05/1919075.aspx

-----------------------------------------------------------------------------------

《GetCurrentDirectory()和GetModuleFileName()函数的区别》

GetCurrentDirectory只是返回当前进程的当前目录,而并不是进程的镜像文件(.exe)所在的目录
GetCurrentDirectory()适用于XP等系统,在WinCE上不能使用
GetModuleFileName()适用于WinCE2.0以后
使用方法:
//下面的一段代码主要是获得当前程序的运行目录(.exe)所在的目录
{
  CString path;
  GetModuleFileName(NULL,path.GetBufferSetLength(MAX_PATH+1),MAX_PATH);
  path.ReleaseBuffer();
  int pos = path.ReverseFind(''//'');
  path = path.Left(pos);
}

GetModuleFileName函数


WINAPI DWORD GetModuleFileName( HMODULE hModule, LPWSTR lpFilename, DWORD nSize); GetBuffer和ReleaseBuffer是一套需要配合使用的函数, 与GetBufferSetLength相比, 优点是如果分配的空间大于实际保存的字符串(0结尾),ReleaseBuffer会把多余申请的空间释放, 归还给系统; 但使用时需要注意以下问题: 如果要保存的字符串为abc(0结尾),则GetBuffer参数应至少为3; 如果要保存的内容不是以0结尾, 比如是读取文件数据, 则GetBuffer参数如果大于文件长度时,ReleaseBuffer参数一定要为文件长度(如果GetBuffer参数为文件长度的话不存在问题,ReleaseBuffer参数可以为默认-1)! GetBufferSetLength相对比较容易理解, 它申请一个指定长度的空间, 即使里面最终保存的字符串长度小于申请的空间长度, 也不会将多余空间释放. =================================================================================关键字:GetModuleFileName、GetCurrentFileDirectory()、GetBufferSetLength()、ReleaseBuffer()
摘自:http://blog.chinaunix.net/u2/61062/showart_1892515.html

 

在EVC下没有GetCurrentDirectory()这个函数能方便地获取当前工作路径,所以我们只能通过GetModuleFileName()函数的返回值来获取当前的工作路径.


//szPath:获取的当前工作路径
void GetCurrentDirectory(CString &szPath)
{
 wchar_t pBuf[256];
 GetModuleFileName(NULL,pBuf,sizeof(pBuf)/sizeof(wchar_t));
 szPath=pBuf;
 szPath = szPath.Left(szPath.ReverseFind('\')+1);
}

 

  const int nBufSize = 512;
  TCHAR chBuf[nBufSize];
  ZeroMemory(chBuf,nBufSize);
  //获取当前执行文件的路径。
  GetModuleFileName(NULL,chBuf,nBufSize);
  TCHAR* pEnd = wcsrchr(chBuf,L'\\');
  *pEnd = L'\0';
  wcscat(chBuf,_T("\\Image\\Background.bmp"));

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值