假设我有一个txt文件,在txt文件中写的是:“doc1.doc,doc2.doc,doc3.doc”等。 在我的代码中,我读了这个txt文件并找到了文档“doc1.doc,doc2.doc ..”。
我想在使用c ++读取txt文件时将这些doc文件放在一个文件夹中。有可能吗?
假设我已有一个文件夹,无需创建新文件夹。唯一关心的是将文件放入文件夹。
编辑:我正在使用linux。
答案 0 :(得分:2)
你可以使用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,看看他们做了什么。
答案 1 :(得分:1)
您的问题没有提供足够的信息来获得完整的答案。作为一种语言,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函数将文件内容复制到另一个文件(即在读取模式下打开源文件,打开写入模式下的目标文件,然后继续从源读取并写入目标,直到到达源文件的末尾)但是如果没有特定于平台的库,则其他文件系统函数更难以重现。 / p>
<强>更新强>
既然您已经指定要在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)