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.程序附錄

 

#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 的時候輸出的是一個“.”符號,不知道為什么。

最后,圖片文件是這樣的,其他文件也應該差不多,大家可以多試試。

 

目的:從完整路徑中提取文件名、不帶后綴的名字、后綴名

如下:

#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;
}

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM