讀取資料夾下同型別檔案的檔名並排序(例項)

2021-08-16 08:33:26 字數 1518 閱讀 3642

工作過程中需要讀取指定資料夾下同型別檔案,並根據檔名最後幾位數字進行排序。當檔名全為數字時,直接根據數字就可進行排序,但是,如果檔名是含有非數字型變數(如abc _-)時,就無法通過上述方法直接進行排序,讀取檔案時預設儲存在string型別變數中,但是該變數通過最後幾位數字來進行排序。對winwows檔案排序功能有過了解,得知其將檔名轉化為二進位制進行排序,這種方法過於複雜。

檔名如下所示:

170818-1743-lm120_401.pcd

170818-1743-lm120_402.pcd

170818-1743-lm120_403.pcd

...170818-1743-lm120_4001.pcd

170818-1743-lm120_4002.pcd

...170818-1743-lm120_40001.pcd

首先讀取資料夾下同型別檔案:

read_filelists(const

std::string& dir_path,std::vector

& out_filelsits,std::string type)else}}

}

在進行排序時,如果直接對容器內string進行排序會出現如下亂序版本:

170818-1743-lm120_401.pcd

170818-1743-lm120_4001.pcd

170818-1743-lm120_40001.pcd

...170818-1743-lm120_402.pcd

170818-1743-lm120_4002.pcd

...170818-1743-lm120_403.pcd

顯然不是我們需要的順序,出現這種情況,猜測是與string型別的編碼特性有關,希望大神告知。

正確排序**:

bool computepairnum(std::pair pair1,std::pair pair2)

void sort_filelists(std::vector

& filists,std::string type)

std::sort(filelists_pair.begin(),filelists_pair.end(),computepairnum);

filists.clear();

for (int i = 0; i < filelists_pair.size(); ++i)

}

在函式sort_filelists中,使用find_last_of("_")函式找到最後乙個"_"符號,並進行分割出來,這一步就是把string型別檔名最後幾位數字對應索引到pair中。之後就可用常規方法進行排序了!

以上。

讀取Windows資料夾下面檔名

在vs工程中新增lib檔名稱比較麻煩,通過 將需要的檔名儲存在txt檔案彙總 在網上找到了一段 修改一下成功執行!test max.cpp 定義控制台應用程式的入口點。include stdafx.h include include include include include include p...

讀取資料夾下的檔案,並且修改檔名

include include 整個標頭檔案可以幫忙讀取資料夾,find開頭的函式或型別名 include include 這個標頭檔案dos下的rename命令,必須使用rename命令,因為讀出的檔名為const型別,不能被修改 using namespace std int main find...

資料夾下的檔名路徑讀取(C )

在機器學習模型訓練前期,需要對資料 影象 文字等進行預處理,而如何快速生成資料的文字路徑呢?本文接下來直接使用c 實現文字路徑生成,可查詢固定格式如.jpg txt等檔案路徑 絕對路徑或檔名 然後儲存為.txt文字,方便後期資料讀取使用。include include include include...