文件读写 获取当前路径
前言:
路径问题,是文件读写绕不过的一个坎。
简要介绍一下,如何获取当前 可执行程序的路径。
示例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 的简介和用法。(只介绍实用、常用的).
如果你以前在哪看到 有介绍这方面的文章,还请 在评论区 留下一个链接。我要去 学习学习 别人写的文章。

浙公网安备 33010602011771号