-
Notifications
You must be signed in to change notification settings - Fork 0
/
Organizador de archivos.cpp
180 lines (164 loc) · 5.48 KB
/
Organizador de archivos.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
#include <Windows.h>
#include <vector>
#include <string>
#include <iostream>
#include <fstream>
#include <limits>
#include <bits/stdc++.h>
#include <cctype>
using namespace std;
string charfig = "Configuracion.txt";
string ejecutable = "Organizador de archivos.exe";
string cpp = "Organizador de archivos.cpp";
fstream config(charfig);
string IrLinea(char num, int linea_plus = 1){
config.seekg(ios::beg);
string n_linea;
bool encontrado = false;
while(!config.eof()){
getline(config, n_linea);
if (linea_plus == 0){
return n_linea;
}
if(n_linea[0] == num or encontrado == true){
encontrado = true;
linea_plus--;
}
}
return "Error";
}
vector<string> filtrar_por_palabra(vector<string> lista_archivos_copia){
vector<string> lista_archivos;
vector<string> palabra_clave;
string palabra;
vector<string> salida;
int similitud = 0;
cout << endl << "Palabras clave: ";
stringstream ss(IrLinea('3'));
while (ss >> palabra){
palabra_clave.push_back(palabra);
cout << palabra << " ";
} cout << endl;
for (int index = 0; index < palabra_clave.size(); index++){
for (int letra = 0; letra < palabra_clave[index].length(); letra++){
palabra_clave[index][letra] = tolower(palabra_clave[index][letra]);
}
}
for (int index = 0; index < lista_archivos_copia.size(); index++){
lista_archivos.push_back(lista_archivos_copia[index]);
}
for (int index = 0; index < lista_archivos_copia.size(); index++){
for (int letra = 0; letra < lista_archivos_copia[index].length(); letra++){
lista_archivos[index][letra] = tolower(lista_archivos[index][letra]);
}
}
for (int index_buscar = 0; index_buscar < palabra_clave.size(); index_buscar++){
salida.push_back("[" + palabra_clave[index_buscar] + "]");
for (int index_lista = 0; index_lista < lista_archivos.size(); index_lista++){
for (int letra_lista = 0; letra_lista < lista_archivos[index_lista].length(); letra_lista++){
if (lista_archivos[index_lista][letra_lista] == palabra_clave[index_buscar][0]){
for (int letra_buscar = 0; letra_buscar < palabra_clave[index_buscar].length(); letra_buscar++){
if (palabra_clave[index_buscar][letra_buscar] == lista_archivos[index_lista][letra_lista+letra_buscar]){
similitud++;
}
}
if (similitud >= palabra_clave[index_buscar].length()){
salida.push_back(lista_archivos_copia[index_lista]);
letra_lista += lista_archivos_copia[index_lista].length();
}
similitud = 0;
}
}
}
}
cout << "\nEncontrados por palabras clave";
int total = 0;
for (int i = 0; i < salida.size(); i++){
if (salida[i][0] == '['){
cout << endl << salida[i] << " = ";
total++;
} else{
cout << salida[i] << " ";
}
} cout << endl << "total de archivos a mover = "<< salida.size()-total << endl <<endl;
return salida;
}
vector<string> filtrados_por_extencion(){
string carpeta = IrLinea('1');
cout << "Carpeta a revisar: " << carpeta << endl;
vector<string> nombres;
vector<string> extenciones;
string filtro_extenciones;
stringstream ss(IrLinea('2'));
cout << "Extenciones a buscar: ";
while (ss >> filtro_extenciones){
if (filtro_extenciones != "*"){
extenciones.push_back(filtro_extenciones);
} else{
extenciones.clear();
extenciones.push_back(filtro_extenciones);
ss.str("");
ss.clear();
}
cout << "." << filtro_extenciones << " ";
}
cout << endl;
WIN32_FIND_DATA fd;
for (int index = 0; index < extenciones.size(); index++){
string busqueda_extencion = carpeta + "\\" + "/*." + extenciones[index];
int cantidad = 0;
cout << "\nArchivos ." << extenciones[index] << endl;
HANDLE hFind = ::FindFirstFile(busqueda_extencion.c_str(), &fd);
if(hFind != INVALID_HANDLE_VALUE){
do {
if(! (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)){
string nombre_archivo = fd.cFileName;
if (nombre_archivo != charfig && nombre_archivo != ejecutable && nombre_archivo != cpp){
nombres.push_back(nombre_archivo);
cantidad++;
cout << " " << nombre_archivo << endl;
}
}
} while(::FindNextFile(hFind, &fd));
::FindClose(hFind);
}
cout << "." << extenciones[index] << " encontrados: " << cantidad << endl;
}
cout << "\ntotal archivos encontrados: " << nombres.size() << endl;
return nombres;
}
int mover_archivos(vector<string> archivos_a_mover){
string carpeta_origen = IrLinea('1') + "\\";
int linea_plus = 0, movidos = 0, errores = 0;
for (int cantidad = 0; cantidad < archivos_a_mover.size(); cantidad++){
while (archivos_a_mover[cantidad][0] == '[' and cantidad < archivos_a_mover.size()-1){
cantidad++;
linea_plus++;
}
string carpeta_final = IrLinea('4', linea_plus) + "\\";
string archivo = carpeta_origen + archivos_a_mover[cantidad];
string archivo_final = carpeta_final + archivos_a_mover[cantidad];
char viejo[carpeta_origen.length() + archivos_a_mover[cantidad].length() + 2];
char nuevo[carpeta_final.length() + archivos_a_mover[cantidad].length() + 2];
strcpy(viejo, archivo.c_str());
strcpy(nuevo, archivo_final.c_str());
if (rename(viejo, nuevo) != 0)
errores++;
else{
cout << "Se a movido: " << archivos_a_mover[cantidad] << endl;
movidos++;
}
}
if (movidos != 0){
cout << "\nSe han movido con exito " << movidos << " archivos" << endl;
}
if (errores != 0){
cout << "\nNo han movido " << errores-1 << " archivos" << endl << \
"Revisa que no existan archivos con el mismo nombre en la carpeta de destino" << endl;
}
return 0;
}
main(){
mover_archivos(filtrar_por_palabra(filtrados_por_extencion()));
cin.get();
}