获取当前路径的问题

关于获取当前路径的问题

 

在开发软件里,常常碰到要读取当前目录下的配置参数文件,或者打开当前目录下别的程序来运行,那么就需要获取当前进程的目录位置,

主要有两个函数来实现

1.函数GetCurrentDirectory获取当前进程所有在的目录。同时也可以使用SetCurrentDirectory函数来改变进程的当前目录。

DWORD GetCurrentDirectory(

  DWORD nBufferLength, // size of directory buffer

  LPTSTR lpBuffer // directory buffer

  );

  函数功能

  找到当前进程的当前目录

  参数说明

  参数 类型及说明

  nBufferLength lpBuffer缓冲区的长度

  lpBuffer 指定一个预定义字串,用于装载当前目录

  返回值

  调用成功 返回装载到lpBuffer的字节数。

  如nBufferLength的长度不够,不足以容纳目录,则返回值是必要的缓冲区长度(要求至少这个长度),其中包括空中止字符。零表示失败。使用GetLastError函数可获得错误信息

2.函数原型:

  DWORD GetModuleFileName(

  HMODULE hModule,

  LPTSTR lpFilename,

  DWORD nSize

  );

  函数参数说明:

  hModule HMODULE 装载一个程序实例的句柄。如果该参数为NULL,该函数返回该当前应用程序全路径。

  lpFileName LPTSTR 是你存放返回的名字的内存块的指针,是一个输出参数

  nSize DWORD ,装载到缓冲区lpFileName的最大值

  函数返回值:

  如果返回为成功,将在lpFileName的缓冲区当中返回相应模块的路径,如果所为的nSize过小,哪么返回仅按所设置缓冲区大小返回相应字符串内容。

  如果函数失败,返回值将为0,并返回GetLastError异常代码。

  需要的头文件为:

  include Windows.h

 

两个简单的例子,做个对比

 

 TCHAR Buffer[MAX_PATH];   

 DWORD dwRet;   

 // 获取当前目录   

 dwRet = GetCurrentDirectory(BUFSIZE, Buffer);   

 

TCHAR *path = new TCHAR[MAX_PATH];   

ZeroMemory(path, MAX_PATH);   

// path == "d:/Project/Test/MFC/MFC"   

GetCurrentDirectory(MAX_PATH, path);   

// path ==  "d:/Project/Test/MFC/debug/MFC.exe"   

GetModuleFileName(NULL,path,MAX_PATH);  

 

可以将第二个函数加以变化一下

CString GetMoudlePath(HMOUDLE hModule)

{

    TCHAR buf[MAX_PATH]={'/0'};

    CString strDir,strTemp;

    GetMoudleFileName(hMoudle,buf,MAX_PATH);

    strTemp=buf;

    strDir=strTemp.left(strTemp.ReverseFind('//')+1);

    return strDir;

}

 

 

另外再提到两个函数 

   CreateDirectory和RemoveDirectory函数

Windows API函数CreateDirectory创建目录,当然目录过多时也需要调用函数RemoveDirectory来删除不需要的目录,然而函数RemoveDirectory只能删除空的目录,也就是目录下没有文件和子目录才能删除。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值