【问题标题】:How to copy a few files with different extensions using C++如何使用 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 语句,我必须整理出带有我想要的扩展名的文件。所以,我现在很好。谢谢!

标签: c++ windows visual-studio copy-paste


【解决方案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 复制文件。

【讨论】:

  • 你的肯定会工作,但我已经解决了这个问题。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-16
  • 2019-11-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多