获取进程的当前目录

来源:互联网 发布:xboxone安卓软件 编辑:程序博客网 时间:2024/05/16 12:24
     系统记录中进程的当前驱动器和目录,但是并非为所有的驱动器记录当前目录。不过,操作系统通过环境变量对其有一些支持。
 =c:=c:\ultil\bin
 =d:=d:\program

如果我们调用Win32函数的时候,传递给它一个指定驱动器,并且该驱动器不是当前驱动器,系统就到进程的环境变量中查找与该驱动器相关的变量。如果变量存在,就是用变量的值作为当前目录。如果不存在,系统就假定指定驱动器的当前目录是根目录。

可以通过调用GetFullPathName来实现,原型如下:

DWORD GetFullPathName(

  LPCTSTR lpFileName, // file name

  DWORD nBufferLength, // size of path buffer,建议取值为:MAX_PATH

  LPTSTR lpBuffer, // path buffer

  LPTSTR *lpFilePart // address of file name in path

  );

  功能说明

  从一指定文件得到文件的路径

  参数说明

  LPCTSTR lpFileName, 指定文件的名字

  DWORD nBufferLength,缓存区的大小

  LPTSTR lpBuffer, 用于存放路径的缓存区

  LPTSTR *lpFilePart 文件名的起始地址

  返回值

  如果调用成功 返回实际路径的长度

  如果缓冲区太小,不能装下文件完整路径的话 返回值就是缓冲区的值 所以我们一般都将缓存区大小设置得足够大

  调用失败 返回0 用GetLastError获得错误信息

例如:要获取C盘的当前目录,可以如下操作:

 TCHAR szPath[MAX_PATH];
 ::GetFullPathName(_T("x:"), MAX_PATH, szPath, NULL);

x为盘符,如果为当前进程所在的盘符,则szPath返回当前进程所在的目录,如果x为其他目录,又可分2种情况,如果环境变量中有该盘符的记录,则直接返回环境变量中的值,如果环境变量中没有,则直接返回以该盘符为根目录的路径x:\。另外一点,环境变量是按字母排序,因此,盘符变量一般排在前面。