文件读写 获取当前路径

前言:

路径问题,是文件读写绕不过的一个坎。

简要介绍一下,如何获取当前 可执行程序的路径。

示例1:

 1 #include <iostream>
 2 
 3 #include <afx.h>
 4 #include <shlwapi.h>
 5 using namespace std;
 6 
 7 int main()
 8 {
 9     ///// 示例1:获取当前路径名
10     WCHAR szPath[MAX_PATH] = { 0 };
11     GetModuleFileName( NULL, szPath, _MAX_PATH);///得到当前.exe的全路径
12     PathRemoveFileSpec(szPath);     //// 去掉当前.exe文件名,以及最后面的 \\ 符号,得到当前.exe所在路径
13    // cout << szPath << endl;    // 这样没法输出这个 字符串
14     CStringA strA(szPath);
15     cout << strA.GetString() << endl;  ///这样强制转换一下,可以输出这个字符串了
16 
17     system("pause");
18     return 0;
19 }

在 vs2013下,新建一个win32的控制台程序,复制这里的代码,就可以把工程跑起来了。

这里有源码,方便初学者。(工程是在vs2013下创建的,创建的是win32的工程)

 

这里主要用到了windows下2个重要的函数。

GetModuleFileName()。获取当前.exe所在的路径(全路径,例如 D://Demo//test.exe )
PathRemoveFileSpec();  去掉.exe的文件名,和最后面的 \\符号,得到当前.exe所在的路径。

这里只介绍怎么用。原理可以参考网路上各位朋友的介绍。

给出几个参考链接:

http://blog.sina.com.cn/s/blog_4b7c6cc00100t7j2.html

http://www.cnblogs.com/xuemaxiongfeng/articles/2465544.html

http://blog.csdn.net/a379039233/article/details/46820453

 

 

 

=================== 华丽的分割线 ======================

示例2:

1     WCHAR wsCurdirct[1024] = { 0 };
2     GetCurrentDirectoryW(sizeof(wsCurdirct), wsCurdirct);
3     lstrcatW(wsCurdirct, L"\\EnterRoomGuide.ini");
4     WCHAR wsGameID[16];
5     swprintf_s(wsGameID, L"%d", 1000);  

在vs2013下,创建一个 对话框 应用程序,添加一个button的点击事件。在里面 包含如下代码。打断点调试。

因为 工程是unicode环境,所以都是 用的宽字符的 字符类型。

1.GetCurrentDirectoryW()

调用  GetCurrentDirectoryW() ,获取 当前的路径名。(你可能会想到,在ASCII下是调用 GetCurrentDirectoryA,没错,你的想法是正确的!)

2. WCHAR 类型字符串如何 格式化,利用  swprintf_s()  

用 swprintf() 或者 swprintf_s() 来格式化。(swprintf_s() 是vs2013以后,微软推荐使用的api。swprintf_s() 和 swprintf的区别在于,swprintf_s() 安全一点,不会出现字符越界的问题) 

3.lstrcatW ,和 strcat  用法类似。在字符数组后面附加 字符串。

 

后面的文章,会好好整理一下,printf, sprintf, swprintf, mbstowcs, wcscat_s 等等 api 的简介和用法。(只介绍实用、常用的).

如果你以前在哪看到 有介绍这方面的文章,还请 在评论区 留下一个链接。我要去 学习学习 别人写的文章。

 

posted @ 2016-08-24 07:02  乌龟大师  阅读(1336)  评论(0)    收藏  举报