假设我有一个 txt 文件,在 txt 文件中写着:“doc1.doc, doc2.doc, doc3.doc”.. 等等。在我的代码中,我阅读了这个 txt 文件并找到了文件“doc1.doc , doc2.doc..”。
我想在使用 c++ 读取 txt 文件时将这些 doc 文件放在一个文件夹中。是否可以?
假设我已经有一个文件夹,不需要创建一个新文件夹。唯一关心的是将文件放入文件夹中。
编辑:我正在使用linux。
您可以使用 Giomm,它是 glibmm 的一部分,它是 Glib 的 C++ 绑定。看一下,很直观(比低级系统/posix C 函数多):
http://developer.gnome.org/glibmm/stable/classGio_1_1File.html#details
这可能对目录迭代有用:
http://developer.gnome.org/glibmm/stable/classGlib_1_1Dir.html
它也是便携的!它适用于 Glib 工作的任何地方。Windows、Linux、MacOS……你不会局限于 linux。这确实意味着您依赖于 Glim 和 glibmm,但是 Glib 非常常被 GNU/Linux 软件使用,并且任何使用 GTK 或其任何绑定的 GUI 应用程序,无论如何都非常有可能加载 Glib,这取决于您的情况,这解决方案并没有真正增加额外的依赖。
此外,一个很大的优势,尤其是在使用 Linux 的情况下,是您可以访问自由软件的源代码并查看这些代码在那里的作用。例如,您可以访问 Gnome 的 git 存储库(位于git.gnome.org),然后访问一个处理文档的项目,例如文本编辑器gedit,并了解它如何将文档保存到文件中。或者更好的是,检查一个用 C++ 编写的项目(gedit 是用 C 编写的),例如 Glom 或 Inkscape 或 Gnote,看看它们做了什么。
您的问题没有提供足够的信息来获得完整的答案。C++ 作为一种语言并没有真正具有处理文件夹或文件的功能。这是因为 C++ 与平台无关,这意味着您可以编译 C++ 代码以在 Windows、MacOS、iOS、Android、Linux 任何其他甚至没有文件系统的设备上运行。
当然,在您的情况下,您可能指的是 Windows 或 Linux。如果是这种情况,那么根据它的具体情况,您可以使用文件系统函数来复制或移动文件系统中的文件。
对于 Windows,Win32 API 具有用于复制文件的CopyFile和 CopyFileEx 函数以及用于移动或重命名文件的MoveFile和 MoveFileEx 函数。
对于 Linux,您可以使用sendfile API 函数通过内核复制文件。
我应该指出,可以在 C/C++ 中编写一些与平台无关的代码,以使用 open/read/write 函数将文件的内容复制到另一个文件(即以读取模式打开源文件,打开目标文件在写入模式下,然后继续从源读取并写入目标,直到到达源文件的末尾)但是其他文件系统功能更加困难,如果不是不可能在没有特定于平台的库的情况下重现的话。
更新
由于您指定要在 linux 中执行此操作,因此您可以使用 sendfile 函数:
int inputFileDesc;
int outputFileDesc;
struct stat statBuffer;
off_t offset = 0;
// open the source file, and get a file descriptor to identify it later (for closing and sendfile fn)
inputFileDesc = open ("path_to_source_file", O_RDONLY);
// this function will fill the statBuffer struct with info about the file, including the size in bytes
fstat (inputFileDesc, &statBuffer);
// open the destination file and get a descriptor to identify it later (for closing and writing to it)
outputFileDesc = open ("path_to_destination_file", O_WRONLY | O_CREAT, statBuffer.st_mode);
// this is the API function that actually copies file data from source to dest;
// it takes as params the descriptors of the input and output files and an offset and length for the amount of data to copy over
sendfile (outputFileDesc, inputFileDesc, &offset, statBuffer.st_size);
close (outputFileDesc); // closes the output file (identified by descriptor)
close (inputFileDesc); // closes the input file (identified by descriptor)