Как скопировать несколько файлов с разными расширениями, используя C ++ - PullRequest
0 голосов
/ 05 ноября 2019

В настоящее время я могу копировать и вставлять только один файл с расширением .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);
}

Итак, если дать пример, где папка, из которой я копирую, выглядит так:

enter image description here

Независимо от того, какое имя файла, если оно имеет эти четыре расширения (.jpg, .jpeg, .JPG, .JPEG) , его нужно скопировать и вставить.

Итак, как мне указать 4 разных расширения? Есть ли регулярное выражение для этого или дополнительные символы для добавления? Заранее спасибо!

1 Ответ

1 голос
/ 05 ноября 2019

Ниже приведена демонстрация того, как найти файл со специальным расширением в папке:

#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;
}

. Вы можете получить путь к отфильтрованному файлу и имя файла. И затем вы можете попробовать использовать * 1004. * CopyFile для копирования файла.

...