c++文件读取(一)---输入类使用和查找当前程序路径

时间:2023-03-09 17:18:15
c++文件读取(一)---输入类使用和查找当前程序路径

鉴于公司人员流动大,设计一个小的日志定位器,首先要读取日志文件

用输入输出流类操作文件比c的stdio更安全和容易,当然任何此类观点都是对大牛除外

首先是查找当前文件路径,如果用GetCurrentDirectory函数的话

问题一:记得不能在打开文件之后,因为这个是当前进程当前目录,而不是进程的镜像文件(.exe)路径,怎么理解呢

假如exe放在:d:\用户目录\我的文档\visual studio 2012\Projects\file,调用GetCurrentDirectory之前如果操作 d:\用户目录\txt 下的文件,那么,最后返回的路径是  d:\用户目录\txt

问题二:

CHAR pathstr[100] ;
 GetCurrentDirectory(MAX_PATH,pathstr);  这样用的话 "CHAR *" 类型的实参与 "LPWSTR" 类型的形参不兼容

就算 CHAR pathstr[100] 改成  TCHAR pathstr[100]

此时cout pathstr结果却明显是指针的地址(因为要输出的带中文,跟代码是没有问题的)

c++文件读取(一)---输入类使用和查找当前程序路径

c++文件读取(一)---输入类使用和查找当前程序路径

有人会说wcout,宽字符输出,其实还是有问题,如下:

c++文件读取(一)---输入类使用和查找当前程序路径

其实只要在工程属性里改字符节属性即可,如下

c++文件读取(一)---输入类使用和查找当前程序路径

c++文件读取(一)---输入类使用和查找当前程序路径

这样最后小工具就可以找到自己的路径,也就可以读取这个路径下的文件,至于怎么遍历这个路径下的文件将放到下一篇

下面输入流使用的教程很多,只放一些简单的代码和最后的效果运行图:

        //ifstream inFile;
//inFile.open("test.txt");
ifstream inWordFile("test.txt"); string str;
vector<string> vec;
while(inWordFile >> str)
{
vec.push_back(str);
}
vector<string>::iterator iter;
for(iter = vec.begin();iter != vec.end();iter++)
{
cout << *iter << endl;
}
//string linestr;
//while(getline(inWordFile,linestr)) ---读取行是ok的,只是注释掉而已
//{
// cout << linestr << endl;
//}

c++文件读取(一)---输入类使用和查找当前程序路径

运行效果图:

c++文件读取(一)---输入类使用和查找当前程序路径