C++提取文件名與提取XML文件的方法詳解
1、提取文件名
- 查找容器內子序列的最後一次出現的位置
std::find_end(str.begin(), str.end(), pattern.begin(), pattern.end())
- 查找容器內子序列的第一次出現的位置
std::search()
- find函數主要實現的是在容器內查找指定的元素,並且這個元素必須是基本數據類型的。查找成功返回一個指向指定元素的迭代器,查找失敗返回end迭代器。
std::find()
- 返回兩個迭代器之間的距離,也可以理解為計算兩個元素 first 和 last 之間的元素數
std::distance(str.begin(), result)
- substr()截取字符串子序列,第一個參數為開始索引,第二參數是子序列長度
- substring() 截取字符串子序列,第一個參數為開始索引,第二參數是結束索引
str.substr(0, std::distance(str.begin(), result) + 1)
#include <iostream> #include <string> # include <algorithm> //註意要包含該頭文件 using namespace std; std::string ExtractFileName(std::string path) { //不帶後綴名的文件名 std::string fileBaseName; //文件目錄 std::string str = path; //待匹配的子序列 std::string pattern = "/"; //查找容器內子序列的最後一次出現的位置,在[str.begin(),str.end ())內搜索由[pattern.begin(), pattern.end()) //組成的子序列,然後將迭代器返回到其第一個元素,即pattern.begin(),若沒有發現,返回-1 // 與std::search()類似,後者返回子序列第一次出現的位置 auto result = std::find_end(str.begin(), str.end(), pattern.begin(), pattern.end()); if (result != str.end()) { //substr()截取字符串子序列,第一個參數為開始索引,第二參數是子序列長度 //substring(截取字符串子序列,第一個參數為開始索引,第二參數是結束索引 //目錄 auto dirName = str.substr(0, std::distance(str.begin(), result) + 1); //帶後綴名的文件名 auto fileName = str.substr(std::distance(str.begin(), result) + 1); //不帶後綴名的文件名 fileBaseName = fileName.substr(0, fileName.size() - 4); } return fileBaseName; }
2、提取XML文件
首先要引入tinyxml2的頭文件,tinyxml2.h和tinyxml2.cpp
xml文件內容:
<?xml version="1.0" encoding="UTF-8"?> MD5123
聲明XMLDocument變量,存放xml文件
tinyxml2::XMLDocument doc
讀取xml文件
doc.LoadFile("demo.xml")
獲取頭節點
XMLElement *root = doc.RootElement();
頭結點的兄弟節點
XMLElement *root1 = root->NextSiblingElement()
獲取節點的id的屬性
root1->Attribute("id");
獲取節點的name的屬性
head->Attribute("name")
獲取節點的文本內容
root1->GetText();
獲取頭結點下的head節點
XMLElement *head = root->FirstChildElement("head")
#include <stdio.h> #include <iostream> #include <Windows.h> #include <string> #include "tinyxml2-master/tinyxml2.h" using namespace std; using namespace tinyxml2; void readXML() { //聲明XMLDocument變量 tinyxml2::XMLDocument doc; //讀取xml文件 doc.LoadFile("demo.xml"); //判斷是否讀取成功 if (doc.Error()) { printf("Load XML failed!"); return; } //獲取頭節點 XMLElement *root = doc.RootElement(); //判斷頭結點有沒有兄弟節點 if (root->NextSiblingElement() != NULL) { //頭結點的兄弟節點 XMLElement *root1 = root->NextSiblingElement(); //獲取節點的id的屬性 printf("第二個一級節點%s\n", root1->Attribute("id")); } if (root->GetText() != NULL) { string rootStr = root->GetText(); printf("第一個一級節點的內容%s\n", rootStr); } XMLElement *head = root->FirstChildElement("head"); //獲取節點的內容 printf("head的內容%s\n", head->GetText()); printf("head的id%s\n", head->Attribute("id")); printf("head的name%s\n", head->Attribute("name")); system("pause");
總結
今天用C++實現瞭提取文件名與XML文件。
本篇文章就到這裡瞭,希望能夠給你帶來幫助,也希望您能夠多多關註WalkonNet的更多內容!
推薦閱讀:
- C# 如何在WINForm程序中創建XML文件
- C++中TinyXML讀取xml文件用法詳解
- Centos7 Shell編程之正則表達式、文本處理工具詳解
- C++深入分析講解鏈表
- Linux文件系統介紹