获取当前进程目录 GetCurrentDirectory() 及 获取当前运行模块路径名GetModuleFileName()
GetCurrentDirectory 获得的是当前进程的活动目录(资源管理器决定的),可以用SetCurrentDirectory 修改的。
转自 http://m.blog.csdn.net/blog/scuthanman/10094793
GetModuleFileName函数可以获取当前执行模块所在位置的绝对路径名,无论是哪里的进程对模块进行调用。
而GetCurrentDirectory获取的是当前进程所在的当前目录,跟执行模块所在的位置并没有关系,返回的是主进程所在目录。
GetCurrentDirectory函数原型
DWORD GetCurrentDirectory(
DWORD nBufferLength,
LPTSTR lpBuffer
);
Parameters
nBufferLength: 接收保存路径的字符串缓存长度, 缓存必须有一个保存结束的空字符的位置.
lpBuffer:指向接收字符串的缓存,收到的非空字符串指定了当前目录的绝对路径.
The GetCurrentDirectory function retrieves the current directory for the current process.
TCHAR path[MAX_PATH] = {};
GetCurrentDirectory(MAX_PATH, path);
GetCurrentDirectory返回当前进程的当前目录,并不一定返回你的exe应用程序的目录。如果你在应用程序中调用了打开文件对话框,你选择了一个文件,那么,这个文件所在的目录就成了当前进程的当前目录了。

#include "stdafx.h"
#include <Windows.h>
int _tmain(int argc, _TCHAR* argv[])
{
TCHAR path[MAX_PATH] = {};
GetCurrentDirectory(MAX_PATH, path);
wprintf(L"%s\n", path); TCHAR pathm[MAX_PATH];
GetModuleFileName(NULL, pathm, MAX_PATH);
wprintf(L"%s\n", pathm);
system("pause"); return ;
}

2、
DWORD GetModuleFileName(
HMODULE hModule,
LPTSTR lpFilename,
DWORD nSize
);
函数参数说明:
hModule HMODULE 装载一个程序实例的句柄。如果该参数为NULL,该函数返回该当前应用程序全路径。
lpFileName LPTSTR 是你存放返回的名字的内存块的指针,是一个输出参数
nSize DWORD ,装载到缓冲区lpFileName的最大值
函数返回值:
如果返回为成功,将在lpFileName的缓冲区当中返回相应模块的路径,如果所为的nSize过小,哪么返回仅按所设置缓冲区大小返回相应字符串内容。
如果函数失败,返回值将为0,并返回GetLastError异常代码。
需要的头文件为:
include Windows.h
下面的例子是错的,因为不确定前进程目录是固定的
if (_access("uny.ini", ) == )
{
//首先检查当前路径是否存在配置文件
strcpy(&sCfgFile[], DEFAULT_CFG_FILE);
}
else
{
GetSystemDirectoryA(sCfgFile, sizeof(sCfgFile) - );
strcat(&sCfgFile[], "\\");
strcat(&sCfgFile[], DEFAULT_CFG_FILE);
}
应该用
TCHAR module_path[MAX_PATH] = { };
DWORD dw_ret = GetModuleFileName(NULL, module_path, MAX_PATH);
_tstring dll_path = module_path;
if ( != dw_ret)
{
size_t pos = dll_path.find_last_of('\\');
if (- != pos)
{
dll_path = dll_path.substr(, pos + );
}
}
获取exe所在的目录,不会根据进程目录的改变而改变。
要知道进程的目录是可以用 SetCurrentDirectory 修改的。
获取当前进程目录 GetCurrentDirectory() 及 获取当前运行模块路径名GetModuleFileName()的更多相关文章
- WPF-TreeView获取文件夹目录、DataGrid获取目录下文件信息
开发一个WPF桌面应用程序.刚接触WPF编程以及C#语言,这里把一些关键的问题记录下来. 下面是实现将路径的文件夹信息绑定到TreeView及DataGrid上显示. 关键问题是C#数据绑定方式及IE ...
- Asp.Net 无法获取IIS拾取目录的解决办法[译]
Asp.Net 无法获取IIS拾取目录的解决办法 作者:Jason Doucette [MCP] 翻译:彭远志 原文地址:Fixing the cannot get IIS pickup direc ...
- windows下使用C#获取特定进程网络流量
最近老板接了一个中船重工的项目,需要做一个有关海军软件系统的组件评估项目,项目中有一个子项目需要获取特定进程的各种系统参数,项目使用.NET平台.在获取特定进程各种系统参数时,其它诸如进程ID,进程名 ...
- FTPClient使用中的问题--获取当前工作目录为null
使用org.apache.commons.net.ftp.FTPClient 来做ftp的上传下载功能 FTPClient ftp = new FTPClient();ftp.connect(doc. ...
- ASP.NET网站中获取当前虚拟目录的应用程序目录的方法(转)
[原创]ASP.NET网站中获取当前虚拟目录的应用程序目录的方法 ASP.NET网站中获取当前虚拟目录的应用程序目录的方法1.问题描述:有时候,某个网页控件会被不同目录下文件使用,此时如果该控件中有一 ...
- iOS 获取文件的目录路径的几种方法 [转]
iOS 获取文件的目录路径的几种方法 2 years ago davidzhang iphone沙箱模型的有四个文件夹,分别是什么,永久数据存储一般放在什么位置,得到模拟器的路径的简单方式是什么. d ...
- 获取其他进程中ListBox和ComboBox的内容
(*// 标题:获取其他进程中ListBox和ComboBox的内容 说明:Window2000+Delphi6调试通过 设计:Zswang 支持:wjhu111@21cn.com 日期:2004-0 ...
- VB VS2003获取当前进程用户登录
Page.User.Identity.Name获取当前进程用户名称,VS03才可以用
- iOS开发——数据持久化Swift篇&文件目录路径获取(Home目录,文档目录,缓存目录等)
文件目录路径获取(Home目录,文档目录,缓存目录等) iOS应用程序只能在自己的目录下进行文件的操作,不可以访问其他的存储空间,此区域被称为沙盒.下面介绍常用的程序文件夹目录: 1,Home ...
随机推荐
- HDU 5887 Herbs Gathering(搜索求01背包)
http://acm.hdu.edu.cn/showproblem.php?pid=5887 题意: 容量很大的01背包. 思路: 因为这道题目背包容量比较大,所以用dp是行不通的.所以得用搜索来做, ...
- C++ 重载new和delete
下边代码对new和delete进行了简单的重载: #include <memory> #include <iostream> #include <cstddef> ...
- python 获取格式化时间
#!/usr/bin/python # -*- coding: UTF- -*- import time localtime = time.asctime( time.localtime(time.t ...
- NetCat教程
NetCat by Jian Lee 简介 使用 隐藏命令行参数 正/反向域名解析 参数详解 案例 监听端口(制作蜜罐) 端口扫描 ftp 服务器 两台服务器文件校验 使用注意 简介 使用 最简单的使 ...
- mac 下安装mongodb
转载自https://segmentfault.com/a/1190000002547229 概念 MongoDB 是一个跨平台的,面向文档的数据库,提供高性能,高可用性和可扩展性方便. MongoD ...
- C#读写记事本(txt)文件
C#写入记事本(txt)文件方法一: FileStream stream = new FileStream(@"d:\aa.txt",FileMode.Create);//file ...
- python模块——socket (实现简单的C/S架构端通信操作CMD)
# 服务端代码#!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = "loki" import socket impo ...
- 【异常】Caused by: java.lang.NoClassDefFoundError: org/aspectj/lang/annotation/Around
原因:缺少aspect,AOP的maven坐标 导入maven坐标: <dependency> <groupId>org.springframework</groupId ...
- memcached哈希表操作主要逻辑笔记
以下注释的源代码都在memcached项目的assoc.c文件中 /* how many powers of 2's worth of buckets we use */ unsigned int h ...
- memcached set命令的大致处理逻辑笔记
这次记录状态机的主要逻辑,跟踪set命令的执行流程,暂不涉及到内存申请这一块,下面内容基本都是代码注释 首先还是补充了解下客户连接在发送数据到数据被处理并返回过程中conn的各种状态的表示 enum ...