linux下遍历文件夹及获取路径下文件名字(字符串操作)
因为最近在做LPR(车牌识别)的小项目,需要把图片样本导入并训练,所以写了一个小程序。
在参考了网上部分资料后,得到目标目录charSamples下,文件夹1里所有50个样本图片文件的路径。
------------------------------------------------------------------
1.dirent.h
dirent,LINUX系统下的一个头文件,在这个目录下/usr/include,为了获取某文件夹目录内容,所使用的结构体。
引用头文件#include<dirent.h>
struct dirent
{
long d_ino;/* inode number 索引节点号 */
off_t d_off; /* offset to this dirent 在目录文件中的偏移 */
unsigned short d_reclen;/* length of this d_name 文件名长 */
unsigned char d_type;/* the type of d_name 文件类型 */
char d_name [NAME_MAX+1];/* file name (null-terminated) 文件名,最长256字符 */
}
-------------------------------------------------------------------
2.实现过程
这是我保存的图片路径图:
--------------------------------------------------------------------------------------------------------------
执行效果:
3.程序附录
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #include <dirent.h> #include <stdio.h> #include<iostream> #include<vector> using namespace std; vector <string> findfile(string path); int main( int argc, char *argv[]) { vector<string> Filename = findfile( "charSamples/1/" ); } vector <string> findfile(string path) { DIR *dp; struct dirent *dirp; vector<std::string> filename; if ( (dp=opendir(path.c_str()) )==NULL ) perror ( "open dir error" ); while ( (dirp=readdir(dp) )!=NULL ) filename.push_back(path + string(dirp->d_name)); for ( int i = 2;i<filename.size();i++) cout<<i<< ":" <<filename[i]<<endl; closedir(dp); return filename; } |
有点疑惑:输出的时候,我是以 I = 2 为起始的,因为 I= 0和1 的时候输出的是一个“.”符号,不知道为什么。
最后,图片文件是这样的,其他文件也应该差不多,大家可以多试试。
目的:从完整路径中提取文件名、不带后缀的名字、后缀名
如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | #include <iostream> #include <string> using namespace std; void main() { string path = "C:\Users\Administrator\Desktop\text\data.22.txt" ; //1.获取不带路径的文件名 string::size_type iPos = path.find_last_of('\') + 1; string filename = path.substr(iPos, path.length() - iPos); cout << filename << endl; //2.获取不带后缀的文件名 string name = filename.substr(0, filename.rfind( "." )); cout << name << endl; //3.获取后缀名 string suffix_str = filename.substr(filename.find_last_of( '.' ) + 1); cout << suffix_str << endl; } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
2018-03-25 tensorflow函数介绍(4)
2018-03-25 python其他篇(1)