如何在C++中将文件路径作为节点添加到树或堆栈中
How do I add file paths as nodes to a tree or stack in C++
我有一个项目要使用数据结构(树、堆栈或队列)搜索、重命名或删除计算机上选定驱动器上的文件和文件夹。我的问题是,如何在C++中添加文件路径和目录作为节点?
另一个答案中的注释建议使用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中文件名的第一个1Megabyte(std::字符串),并将输出管道传输到md5sum。。。基本上生成文件的1s Meg的md5sum。md5sum输出将由调用进程接收。
您需要创建适当的命令(传递给popen)来显示目录、文件夹和文件名等。
从命令行运行的东西应该很好,但有些选项可能会使解析输出变得更容易。
对于基于节点的结构,添加一个字符串属性作为文件路径。但是,您可能需要将其中的"\"替换为"/",因为在大多数语言中,正斜杠通常是转义符。例如在队列中:
class Node {
Node next;
char[50] path;
}
您可以像创建类中的任何其他对象一样创建访问器和赋值器。这将允许您为其赋值并读取值。文件夹可以用作父文件夹,而文件是子文件夹。树状结构可能是最简单的方法。
- 将树节点添加到向量向量中的 n 元树遍历的平均和最坏情况时间复杂度是多少?
- 如何将节点添加到链表
- 在 C++ 中使用 temp 变量将节点添加到链表的末尾
- 将节点添加到链接列表中,而无需明确分配内存空间(无需使用新)
- 推送功能(将新节点添加到列表顶部)C
- 倒排索引节点添加字
- 制作完成后是否可以将节点添加到图形中
- 嗨,我正在尝试将集合的特定节点添加到列表中,该列表位于哈希表中
- C++链表将新节点添加到列表的开头
- 如何将节点添加到链表C++的前面?我想多了这个概念
- 用独特的指针将节点添加到树上
- 将节点添加到链表的末尾
- 将新节点添加到列表中并动态命名
- C++:尝试将新节点添加到链表会产生"线程 1:EXC_BAD_ACCESS(代码 = 1,地址 = 0x0)"错误
- 在c++中按字母顺序将节点添加到链表中
- 将边缘节点添加到没有边缘的顶点时出现 Seg 错误
- 当我尝试将新节点添加到列表中时,我收到错误消息"no matching function call"
- 如何在C++中将文件路径作为节点添加到树或堆栈中
- 将多个节点添加到树C++中
- C++将节点添加到链表的开头一次后失败.其他方法也有问题