C++中如何获取一个文件夹下带有指定文件后缀名的文件绝对路径

在更新单点定位程序之前,先说一下C++中如何获取一个文件夹下带有指定文件后缀名的文件绝对路径。由于在调试单点定位程序的时候,我总是不停地输入观测值文件(.o)和卫星星历文件(.n)。因此就要不断地的复制粘贴复制粘贴,把自己弄成了一个复读机。哎,昨天才想起来要是能够直接输入文件夹的名称,岂不是更加省事,起码不用来回的复制观测值文件的路径和星历文件的路径。下面就来说一下如何获取一个文件夹下带有指定文件后缀名的文件绝对路径。
由于在导航领域一般都采用C++来编写项目,让这个项目有着更好的可移植性。大家可能会想,为什么不用matlab编写或者利用java编写呢?就这个问题我专门地问过老师。老师的答复是这样的:起码要回利用纯粹的C语言编写,其次要回用C++编写,抛开运行效率不说,接收机上不可能安装一个matlab或者是java虚拟机,所以用C++编写的大型项目更加具有普适性,众所周知,Win10就是大部分利用C++编写的,少量的C语言还有底层接口的汇编语言。听到老师的讲解,我心服口服的用C++写了。(悄咪咪地说一句,我怎么感觉纯粹的C语言要求更高,果然老师那个年代的人都是大牛)
网上有很多教程讲了如何获取一个文件夹下带有指定文件后缀名的文件绝对路径。我整理了一下,并且发现了其中有很多网上没有的大坑,留在这里备忘,要是大家有什么更加好的代码可以留言一起讨论呀。

void get_eph(GPS_eph *& eph_1st, CString path)
{
	CFileFind finder;
 	vector<CString> allfile;
 	vector<CString> getfile;
 	CString p = path + "\\*.*";
 	bool bworking = finder.FindFile(p);
 	while (bworking)
 	{
  		bworking = finder.FindNextFileA();
  		allfile.push_back(finder.GetFileName());
 	}
 	for (int i = 0; i < allfile.size(); i++)
 	{
  		int flag = allfile[i].Find(".18n");
  		if (flag >= 0)
  		{
   			getfile.push_back(allfile[i]);
  		}
 	}
 	finder.Close();
}

为什么我无法直接复制粘贴上面那段代码呢,一粘贴就卡死…只能自己手动调格式了。
在这里我想要找到指定文件夹下后缀名为.18n的卫星星历文件,其中用到CFileFind大家可以百度,有很多解释,找到的文件名一定要加上前面的文件夹的名字。因为我试过了,找到的文件名真的只是文件名,不是文件的绝对路径,加上文件夹名字才可以用于文件流的输入输出。
大家在用CFileFind的时候,一定要加上头文件

#include <afx.h>

此外,还要注意一个问题,就是可能会报以下错误。
错误
这是因为由于CString类是MFC中类似于String类的东西,只不过编码方式不一样。这里大家可能会有疑问,为什么不使用String类,因为行不通。如果使用String类,修改起来代码更要命,而且遇到编码问题对于像我这样的小白肯定是致命打击。所以我还是使用CString类吧。
一旦遇到上面的问题,大家到项目属性里面更改一些东西就好了。
更改
像我上面这样更改就好了。
单点定位的程序更新还要几天,因为我突然发现了一个公式上面的问题,得求助一下老师了,学艺不精,大家见谅啊。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值