[英]How do I add library paths of C libraries that I want to use in C++ to the environment
[英]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.