我有一个包含文件(主要是图像)的目录,并且正在尝试创建一个名为Thumbnails的新子目录,该目录将复制所有图像并替换“ .jpg”中的文件扩展名。 “ .png”到“ .thumb”。
到目前为止,我的代码会将所有文件复制到新的子目录中,但是我找不到一种方法来忽略所有不是图像的文件(它正在复制原始目录中的每个文件)并更改扩展名复制的文件中。
#include <iostream>
#include <filesystem>
using namespace std;
namespace fs = std::experimental::filesystem;
//Predefined Functions
void createThumbnails(string path);
int main(void)
{
string DailyFolderPath = ".../images";
createThumbnails(DailyFolderPath);
return 0;
}
void createThumbnails(string path)
{
//Create Thumbnail Sub Directory
string newThumbDir = path + "/Thumbnails";
fs::create_directories(newThumbDir);
//Copy files into Thumbnail Directory
fs::copy(path, newThumbDir);
for (const auto & p : fs::directory_iterator(newThumbDir))
cout << p.path().filename() << endl;
}
答案 0 :(得分:0)
您在注释中建议的尝试无效,因为您仅传递文件名而不是文件的完整路径:
fs::copy_file(p.path().filename(), p.path().filename().replace_extension(".thumb"));
^^^^^ your app doesn't see these files
您可以尝试以下操作:
void createThumbnails(string source)
{
fs::path newThumbDir = source + "/Thumbnails";
fs::create_directories(newThumbDir);
for (const auto & p : fs::directory_iterator(source)) // iterate over all files in source dir
{
fs::path fileToCopy = p; // make copy of path to source file
if (fileToCopy.extension() == ".png" || fileToCopy.extension() == ".jpg")
{
fileToCopy.replace_extension(".thumb"); // change extension
fs::path target = newThumbDir / fileToCopy.filename(); // targetDir/name.thumb
fs::copy_file(p,target); // pass full paths
}
}
}