在 C++ 中使用 Linux 系统调用以及文件和文件夹管理

using linux system calls and file & folder management in c++

本文关键字:文件 文件夹 管理 系统调用 C++ Linux      更新时间:2023-10-16

我正在编写一个c ++程序,任务如下:

我有一个string proj_Name和另一个字符串地址,我的程序旁边有一个名为 root 的文件夹。现在,我必须在根文件夹中创建一个名为proj_name的文件夹,并将地址中的所有内容复制到此新文件夹中。

当使用linux终端制作目录或复制文件时,我键入mkdir proj_namecp [src] [dst]。有人告诉我,要在我的程序中使用终端命令,我必须使用系统调用,但我不知道什么是系统调用或如何使用它。

除此之外,我可能会在root中创建更多的项目文件夹,并且我必须能够访问程序中的每一个。

如何使用 OOP 设计来处理这些文件和文件夹(例如,我从用户那里获得proj_name,我必须在 root 中找到相应的文件夹,然后对该项目执行一些任务(?

我绝对应该有一个_project_ class,但我不知道它需要什么成员变量。此外,有人告诉我,我可以像这样以递归的方式复制文件夹:复制文件夹>打开它>为每个文件>复制文件>对于每个文件夹,从一开始就执行此算法。

有人可以帮我吗?

提前谢谢。

我假设这是家庭作业,尽管您没有指出它是。三个解决方案浮现在脑海中:

  1. 使用 system() 调用创建命令行字符串并执行它们。坦率地说,这非常糟糕,原因有很多:(i(很难检查命令是否有效,(ii(插入恶意代码(即hack(很容易,(iii(它非常特定于平台。

  2. 正如您所提到的,您可以使用系统调用来实现文件复制、目录创建等。如果你正在研究UNIX,你可以看看这个问题,这可能会有所帮助。同样,这里的缺点是它非常特定于平台。

  3. 最后,您可以使用通用库,例如 Boost 文件系统,这是最好的(这三种解决方案(,但如果您必须证明可以在 OO 中对文件系统进行建模,则可能不会对您有太大帮助。不过,浏览一下 API 可能会为您提供一些关于各种对象如何在 OO 设计中组合在一起的线索。