C ++ en Windows atraviesa y transfiere todas las imágenes en la carpeta y los subarchivos, y empaqueta el programa en un archivo ejecutable exe


prefacio

Recientemente, para facilitar la recopilación de datos, es necesario agrupar las imágenes en cada carpeta y sus subcarpetas de fábrica en una carpeta para cargar, por lo que la función se realiza con C++.


1. Realización de funciones

1. Recorra las imágenes debajo del archivo y sus subcarpetas, y coloque su ruta en el contenedor

Aquí está la operación en Windows, el código es el siguiente:

//遍历文件夹
void finddir(string dirpath,vector<string>&files){
    
    
	//文件句柄 
	//intptr_t  hFile = 0;
	long long  hFile = 0;
	//文件信息 
	struct _finddata_t fileinfo; //文件信息读取结构
	string p; //string类很有意思的一个赋值函数:assign(),有很多重载版本
	if ((hFile = _findfirst(p.assign(dirpath).append("\\*").c_str(), &fileinfo)) != -1)
	{
    
    
		do
		{
    
    
			if ((fileinfo.attrib & _A_SUBDIR)) //判断是否为文件夹
			{
    
    
				if (strcmp(fileinfo.name, ".") != 0 && strcmp(fileinfo.name, "..") != 0)
				{
    
    
					finddir(p.assign(dirpath).append("\\").append(fileinfo.name), files);//递归当前文件夹
				}
			}
			else  //文件处理
			{
    
    
				//cout << fileinfo.name << endl;
				string filename = fileinfo.name;
				string suffix = filename.substr(filename.find_last_of(".") + 1);
				//cout << suffix << endl;
				if (suffix == "jpg") {
    
    
					files.push_back(p.assign(dirpath).append("\\").append(fileinfo.name));//文件名

				}
			}
		} while (_findnext(hFile, &fileinfo) == 0); //寻找下一个,成功返回0,否则-1
		_findclose(hFile);
	}

}

2. Crea una carpeta

La función aquí es juzgar si la ruta del archivo almacenado existe y no hay creación automática. El código es el siguiente:

//创建文件夹
void createDir(string path) {
    
    
	if (_access(path.c_str(), 0) == -1) {
    
    
		_mkdir(path.c_str());
	} //判断文件夹是否存在,不存在则自动创建
}

3. Transferir archivos

Mover la imagen al directorio especificado, mover

//移动文件
bool move_file(string imgpath1, string imgpath2) {
    
    
	//imgpath1:原先路径
	//imgpath2:要转移的路径
	BOOL flag = MoveFile(imgpath1.c_str(), imgpath2.c_str()); //若imgpath2不存在会返回0
	return flag;

4. Código de llamada

int main()
{
    
    
	string dirpath = "";//待转移目录
	if (_access(dirpath.c_str(), 0) == -1) {
    
    
		cout << "该目录不存在" << endl;
	}
	vector<string> file_list;
	finddir(dirpath,file_list);
	//cout << "finished" << endl;

	string save_path = "";//目标目录
	createDir(save_path);

	//转移文件
	clock_t s,e;
	s = clock();
	for (int i = 0; i < file_list.size(); i++) {
    
    
		string imgname = file_list[i].substr(file_list[i].find_last_of("\\")+1);
		//cout << file_list[i] << ",\t"<<save_path + "\\" + imgname << endl;
		move_file(file_list[i], save_path + "\\" + imgname);
	}
	e = clock();
	double total_time = double(e - s) / CLOCKS_PER_SEC;
	cout << "Total time:" << total_time <<"s" << endl;
	
}

5. Archivos de encabezado requeridos

#include <iostream>
#include <vector>
#include <string>
#include<io.h>  //必不可少
#include<direct.h>
#include<fstream>
#include <Windows.h>
#include <ctime>
#include <cstdlib>
using namespace std;

Dos, paquete exe

1. Instalación de extensión

La herramienta que necesitamos usar aquí es Microsoft Visual Studio Installer Project. El método de instalación es el siguiente. Yo personalmente recomiendo el segundo método:
(1): Seleccione Herramientas en VS—>Extensión y actualización—>En línea, y luego busque directamente, como se muestra en la figura:
inserte la descripción de la imagen aquí

inserte la descripción de la imagen aquí
Si está instalado, la parte que se muestra en el cuadro verde será la misma que la mía. Personalmente, no recomiendo este método, porque es demasiado lento para ser verdad. Hay sugerencias para reemplazarlo con una instalación de punto de acceso. No he probado esto, y los amigos interesados ​​​​pueden probarlo.
(2), la extensión descargada (se recomienda Xunlei), haga doble clic para ejecutar la instalación, el enlace del sitio web oficial es el siguiente: Microsoft Visual Studio Installer Project
Tenga en cuenta que la versión debe ser consistente con la versión VS que usa

2. Generar archivos ejecutables

Aquí me refiero principalmente al artículo de este tipo grande. El artículo es muy detallado, tanto con imágenes como con textos. No hay problemas en el camino. El enlace es el siguiente: Programa de embalaje .


Resumir

Lo anterior es todo el contenido de este artículo. También estoy en el nivel de entrada de C++. Si tiene alguna pregunta, indíquela

Supongo que te gusta

Origin blog.csdn.net/qq_55068938/article/details/127733162
Recomendado
Clasificación