将文本(.txt)文件与图像(.jpg)文件匹配

时间:2017-10-18 05:19:11

标签: c++ windows

我的系统中有两个文件夹,一个是"图像文件夹(包含图像)"第二个是"文本文件夹(包含文本文件)"。在这些文件夹中,很少有图像和文本文件具有相同的名称,如:abc.jpg和abc.txt。

实际上,我想使用输入图像名称找出第二个文件夹中的文本文件(或者我想将文本文件名与图像名称匹配)。

此后,我想将匹配的文本文件复制到" Image文件夹"。

我正在使用WINDOWS操作系统。

1 个答案:

答案 0 :(得分:2)

如果您的问题是找到两个不同的文件名(但具有相似的基本名称),请注意:

  • 目录和文件夹不为C ++ 11或C++14标准所知。未来的C ++ 17标准可能会提供一个filesystem库(但您今天很难找到成熟的实现)

  • POSIX和Windows有directories (不是文件夹)。你可以使用(特别是在Linux或MacOSX上)POSIX函数,如opendir(3)readdir(3)closedir(3)stat(2)结合使用nftw(3)来探索它们,或使用一些更高级的库函数,如{ {3}}

  • basename(3)可能很有用,但是一旦您知道/用作目录分隔符,就可以使用string函数。

  • 一些框架库,特别是QtPOCOBoost,.... 在目录上提供有用的功能并且可以在几个操作系统上提供可用的通用抽象。实际上我建议使用框架库,因为它更容易,更便携。

filefile systems和目录的概念非常operating system(某些学术操作系统没有它们,并提供{{3}的不同概念})。阅读persistence(可免费下载)以获取概述。在Linux和POSIX系统上,文件实际上是Operating Systems: Three Easy Pieces,目录是一种具有将名称映射到i节点的条目的文件,并且文件可以在各种目录中具有多个名称(例如,使用{{3} })。 C ++标准知道i-node,例如通过link(2)

复制文件通常意味着复制其内容(逐字节),因此不是基本操作。在实践中,更好地复制至少16千字节的大块。有些库提供了复制文件的功能。

在Windows上(我不知道),文件和“文件夹”的概念不同,目录分隔符为\。你需要深入研究standard streams。甚至Microsoft文档都提到了input/output library。但是使用框架库会更简单(也更便携)。

顺便说一句,文件夹的术语一般都是错误的。您在Microsoft documentationdirectories上看到一些文件夹(并非所有文件夹),但操作系统(和您的程序)知道目录和文件。

有时候,使用一些比文件更高级的抽象是有用的。例如,GUI库为您提供了一些数据库抽象,desktop environment提供了索引文件,您可以考虑使用SQLiteGDBM之类的database系统,等等...... YMMV。