如何使用 C++ 复制一些具有不同扩展名的文件

Posted

技术标签:

【中文标题】如何使用 C++ 复制一些具有不同扩展名的文件【英文标题】:How to copy a few files with different extensions using C++ 【发布时间】:2019-11-05 05:22:31 【问题描述】:

目前,我只能复制和粘贴一个扩展名为 .jpg 的文件。但是,为了安全起见,我需要确保 .jpeg、.JPG 和 .JPEG 也被复制和粘贴。

这是我粘贴一个扩展名为 .jpg 的文件的代码:

CFileStatus status;
CString strFileName = _T("Test2.jpg");
CString strFilePath = m_strImagePath + _T("\\") + strFileName;                      
CString strCopyPath = m_strCopyPath + _T("\\") + strFileName;
if(CFile::GetStatus(strFilePath, status))

    CopyFile(strFilePath, strCopyPath, FALSE);

因此,如果给出示例,我从中复制的文件夹如下所示:

不管文件名是什么,只要有这四个扩展名(.jpg,.jpeg,.JPG,.JPEG),都应该复制粘贴。

那么,我如何指定 4 个不同的扩展名?是否有正则表达式来执行此操作或添加其他符号?提前谢谢!

【问题讨论】:

绝对不清楚您要做什么。您的代码中有“Test2.jpg”并且想要复制“Test3.jpg”?您传递了一个从未声明或初始化的变量 strRecipe?您调用未定义的函数 IsRecipeImageList 。您能否提供一个完整的最小工作示例?你想用你的代码做什么? 我已经去掉了strRecipe的额外功能。 Test2 只是我如何复制一个文件的一个例子。我已经说过,无论文件是什么名称,只要它们满足这 4 个扩展名,我都需要复制它们。 您可能想要搜索文件。我认为<filesystem> 在 VC 中仍处于试验阶段。看起来您正在使用 MFC:使用 CFileFind @ZDF 我确实使用 CFileFind 来查找所有文件。通过几个 if 语句,我必须整理出带有我想要的扩展名的文件。所以,我现在很好。谢谢! 【参考方案1】:

这是一个关于如何在文件夹中查找具有特殊扩展名的文件的演示:

#include"pch.h"
#include<iostream>
#include<io.h>
#include<vector>
#include<string>
#include <Windows.h>

int get_files(std::string fileFolderPath, std::string fileExtension, std::vector<std::string>& file)

    std::string fileFolder = fileFolderPath + "\\*" + fileExtension;
    std::string fileName;
    struct _finddata_t fileInfo;
    long long findResult = _findfirst(fileFolder.c_str(), &fileInfo);
    if (findResult == -1)
    
        _findclose(findResult);
        return 0;
    
    bool flag = 0;



    do
    
        fileName = fileFolderPath + "\\" + fileInfo.name;
        if (fileInfo.attrib == _A_ARCH)
        
            file.push_back(fileName);
        
     while (_findnext(findResult, &fileInfo) == 0);



    _findclose(findResult);




int main()

    //Folder Path
    std::string fileFolderPath = "D:";




    std::cout << "Output all files in jpeg/JPEG format in the current directory" << std::endl;
    std::vector<std::string> jpeg_files;
    std::string fileExtension_jpeg = ".jpeg";
    get_files(fileFolderPath, fileExtension_jpeg, jpeg_files);



    for (int i = 0; i < jpeg_files.size(); i++)
    
        std::cout << jpeg_files[i] << std::endl;
    



    std::cout << "\nOutput all files in jpg/JPG format in the current directory" << std::endl;
    std::vector<std::string> jpg_files;
    std::string fileExtension_jpg = ".jpg";
    get_files(fileFolderPath, fileExtension_jpg, jpg_files);



    for (int i = 0; i < jpg_files.size(); i++)
    
        std::cout << jpg_files[i] << std::endl;
    
return 0;

可以得到过滤后的文件路径和文件名,然后可以尝试使用CopyFile 复制文件。

【讨论】:

你的肯定会工作,但我已经解决了这个问题。谢谢!

以上是关于如何使用 C++ 复制一些具有不同扩展名的文件的主要内容,如果未能解决你的问题,请参考以下文章

视频转换后如何命名输出文件与输入文件相同但扩展名不同? [复制]

如何使用 package.json 脚本复制具有特定文件扩展名的文件

如何将具有不同扩展名的文件作为BAT文件运行[重复]

如何制作一个批处理脚本来创建指定数量的具有随机名称和指定扩展名的文件? [复制]

C 文件与 C++ 文件的 Eclipse CDT 索引器结果不同

如何使用 Visual Studio Code 将任何扩展名格式化为 .css? [复制]