C++ 如何将文件路径作为节点添加到C++;

C++ 如何将文件路径作为节点添加到C++;,c++,tree,stack,filesystems,queue,C++,Tree,Stack,Filesystems,Queue,我有一个项目,可以使用数据结构(树、堆栈或队列)搜索、重命名或删除计算机上选定驱动器上的文件和文件夹。我的问题是,如何在C++中添加文件路径和目录作为节点?p> 对于基于节点的结构,添加一个字符串属性作为文件路径。但是,您可能需要将其中的“\”替换为“/”,因为在大多数语言中,正斜杠通常是转义字符。例如,在队列中: class Node { Node next; char[50] path; } 您可以像创建类中的任何其他对象一样创建访问器和变异器。这将允许您为其分配值并读取值。 文件夹可以用

我有一个项目,可以使用数据结构(树、堆栈或队列)搜索、重命名或删除计算机上选定驱动器上的文件和文件夹。我的问题是,如何在C++中添加文件路径和目录作为节点?p> 对于基于节点的结构,添加一个字符串属性作为文件路径。但是,您可能需要将其中的“\”替换为“/”,因为在大多数语言中,正斜杠通常是转义字符。例如,在队列中:

class Node {
Node next;
char[50] path;
}
您可以像创建类中的任何其他对象一样创建访问器和变异器。这将允许您为其分配值并读取值。
文件夹可以用作父文件夹,而文件是子文件夹。树结构可能是最简单的方法。

对于基于节点的结构,请添加一个字符串属性作为文件路径。但是,您可能需要将其中的“\”替换为“/”,因为在大多数语言中,正斜杠通常是转义字符。例如,在队列中:

class Node {
Node next;
char[50] path;
}
您可以像创建类中的任何其他对象一样创建访问器和变异器。这将允许您为其分配值并读取值。
文件夹可以用作父文件夹,而文件是子文件夹。树结构可能是最简单的方法。

另一个答案中的注释建议使用一个exec()函数。然后分析和研究输出

我赞成这个想法,但我发现使用popen()更容易。下面的例子都是Linux API的一部分,所以调用是C兼容的,C++可以直接使用。我希望popen()可以在其他操作系统上使用

澄清一下,

< P> 1)PONEN()是调用C++代码的函数调用。p> 2) 您还需要为您的操作系统创建字符串,以生成所需的列表,并将它们提交给您的popen()调用。第一个参数是命令字符串

3) 在读取模式下,“ls-lsa”或“dir”命令的输出将写入生成的进程的输出管道,并且您的代码将需要“吸入”,我建议将其捕获到std::stringstream

4) 捕获“dir-r”输出后,从stringstream解析并提取dir和文件名


对PopEN的C++访问实例:

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第一个参数生成linux命令的示例

  std::string md5sumCmd ("head --bytes=1M " + mPFN +" | md5sum");
此命令获取mPFN(一个std::字符串)中文件名的第一个1M字节,并通过管道输出到md5sum。。。基本上生成文件的1s Meg的md5sum。md5sum输出是调用进程将接收的内容


您需要创建适当的命令(传递到popen)来显示目录、文件夹和文件名等


从命令行执行任何操作都可以,但是一些选项可能会使解析输出更容易

另一个答案中的注释建议使用exec()函数之一。然后分析和研究输出

我赞成这个想法,但我发现使用popen()更容易。下面的例子都是Linux API的一部分,所以调用是C兼容的,C++可以直接使用。我希望popen()可以在其他操作系统上使用

澄清一下,

< P> 1)PONEN()是调用C++代码的函数调用。p> 2) 您还需要为您的操作系统创建字符串,以生成所需的列表,并将它们提交给您的popen()调用。第一个参数是命令字符串

3) 在读取模式下,“ls-lsa”或“dir”命令的输出将写入生成的进程的输出管道,并且您的代码将需要“吸入”,我建议将其捕获到std::stringstream

4) 捕获“dir-r”输出后,从stringstream解析并提取dir和文件名


对PopEN的C++访问实例:

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第一个参数生成linux命令的示例

  std::string md5sumCmd ("head --bytes=1M " + mPFN +" | md5sum");
此命令获取mPFN(一个std::字符串)中文件名的第一个1M字节,并通过管道输出到md5sum。。。基本上生成文件的1s Meg的md5sum。md5sum输出是调用进程将接收的内容


您需要创建适当的命令(传递到popen)来显示目录、文件夹和文件名等


从命令行执行任何操作都可以,但是一些选项可能会使解析输出更容易

检查。标准C++对文件系统没有任何概念(文件),文件和文件夹是字符串。也许你的“节点”可能包含一个字符串?哦。感谢您的快速回复。@DOUGLASO.MOEN它确实包含数据部分的字符串,但我需要知道的是如何将所有文件和文件夹分配给它。如果可能,文件系统依赖于主机。。。你使用的是Windows、Linux还是其他软件?检查。标准C++对文件系统没有任何概念(文件),文件和文件夹是字符串。也许你的“节点”可能包含一个字符串?哦。感谢您的快速回复。@DOUGLASO.MOEN它确实包含数据部分的字符串,但我需要知道的是如何将所有文件和文件夹分配给它。如果可能,文件系统依赖于主机。。。您使用的是Windows、Linux还是其他版本?@CS2016将“C:/”添加为字符串仅在程序运行时显示C:/。目前我有树类:(我不知道如何在这里粘贴我的代码),但是当我在将“C:/”传递给我的节点后调用inoder函数时。打印的不是目录,而是过去的内容。你是在找一个程序来列出目录中的所有文件吗?是的,这让我很困惑。我仍然是一个新手程序员,所以我不知道有一个内置的图书馆来完成这个任务,我一直看到人们使用外部升压库,但是我的教授说有办法在C++中完成它而不需要升压。该项目将能够列出文件和fo