簡體   English   中英

如何在C ++中將文件路徑作為節點添加到樹或堆棧

[英]How do I add file paths as nodes to a tree or stack in C++

我有一個項目,可以使用數據結構(樹,堆棧或隊列)搜索,重命名或刪除計算機上所選驅動器上的文件和文件夾。 我的問題是,如何在C ++中將文件路徑和目錄添加為節點?

對於基於節點的結構,添加將用作文件路徑的字符串屬性。 您可能需要在其中用“ /”替換“ \\”,因為在大多數語言中,斜杠通常是轉義字符。 例如在隊列中:

class Node {
Node next;
char[50] path;
}

您可以像創建類中的其他任何方法一樣創建訪問器和更改器。 這將允許您為其分配值並讀取這些值。 文件夾可以用作父文件夾,而文件是子文件夾。 樹結構可能是最簡單的方法。

其他答案中的注釋建議使用exec()函數之一。 然后解析並研究輸出。

我贊成這個想法,但是我發現使用popen()更容易。 以下每個示例都是Linux API的一部分,因此這些調用與c兼容,並且可以由C ++直接使用。 我希望popen()將在其他操作系統上可用。

澄清,

1)popen()是C ++代碼要調用的函數調用。

2)您還需要為操作系統創建字符串以生成所需的列表,並將其提交給popen()的調用。 第一個參數是命令字符串

3)在讀取模式下,“ ls -lsa”或“ dir”命令的輸出將被寫入生成的進程的輸出管道中,並且您的代碼將需要“吸入”,我建議將其捕獲到std :: stringstream。

4)捕獲“ dir -r”輸出后,然后從字符串流中解析並提取dir和文件名。


C ++訪問popen的示例:

FILE* m_pipe = nullptr; // popen return a FILE*


// use m_pipe to read from sub-process std::out
m_pipe = ::popen (m_cmd.c_str(), "r");  // read mode
//       ^^ because popen is not in a namespace


m_pipe = ::popen(m_cmd.c_str(), "w"); // write to sub-process std::in

int32_t pcloseStat = ::pclose(m_pipe);



{
   (void)memset(buff, 0, BUFF_SIZE);

   // Reads characters from stream and stores them as a C string
   // into buff until
   //    a) (BUFF_SIZE-1) characters have been read or
   //    b) a newline or
   //    c) the end-of-file is reached,
   // whichever happens first.
   char* stat = fgets (buff, BUFF_SIZE, m_pipe); // returns buff or null
   int myErrno = errno;               //^^^^^^ -- created by popen
}

為popen 1st參數構建linux命令的示例...

  std::string md5sumCmd ("head --bytes=1M " + mPFN +" | md5sum");

此命令在mPFN中獲取文件名的第一個1Mbyte(一個std :: string),並將輸出到md5sum的管道...實質上生成該文件的1s Meg的md5sum。 md5sum輸出是調用進程將接收的輸出。


您將需要創建適當的命令(傳遞給popen)以顯示dir和文件夾以及文件名等。

從命令行執行的所有操作都應該可以,但是某些選項可能會使解析輸出變得更加容易。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM