
ayuda con programa de comandos
Publicado por ricardo (1 intervención) el 29/05/2014 22:55:25
Hola comunidad, tengo aqui un pequeño prompt de comando.
En la ultimo antes del main tengo dos funciones resaltadas en negrita, una crea un directorio y la otra lo elimina pero no lo hacen con un nombre digitado por pantalla si no con uno fijo que yo le di "ruta" Alguna ayuda para que yo pueda darle el nombre al directorio que se valla a crear o eliminar, haciendo uso de los comando del programa.
Muchas gracias cualquier ayuda....
#include <iostream>
#include <string>
#include <direct.h>
#include <vector>
#include <fstream>
#include <stdio.h>
#include <windows.h>
using namespace std;
//Devuelve una subcadena indicando una posicion inicial y un caracter delimitador.
string subCadena(string cadena, int pos, char caracter) {
string subcadena = "";
while (cadena[pos] != caracter) {
subcadena += cadena[pos++];
if (pos >= cadena.size())
break;
}
return subcadena;
}
//Dado un string, le quita la primera palabra que es el comando y separa los parametros, los almacena en un vector y lo devuelve.
vector<string> separaAtributos(string lectura) {
vector<string>atributos;
atributos.clear();
string atributo;
for (int i = 0; i < lectura.length(); i++) {
if (lectura[i] == ' ') {
if (lectura[i + 1] != ' ') {
atributo = subCadena(lectura, i + 1, ' ');
atributos.push_back(atributo);
}
}
}
return atributos;
}
//Despliega la ayuda donde explica cada uno de los comandos.
void ayuda(vector<string>atributos) {
string atributo;
if (atributos.size() == 0) {
cout << endl << "[AYUDA GENERAL]" << endl << "Para obtener ayuda de un comando especifico teclee ayuda + comando " << endl;
cout << "[Comandos]" << endl << "- Cambia" << endl << "- Copia" << endl << "- Borra" << endl << "- Renombra" << endl;
cout << "- Lista" << endl << "- Muestra" << endl << "- Crea" << endl << "- Elimina"<< endl << "- Actual"<< endl << "- Salir"<< endl << endl;
} else {
while (!atributos.empty()) {
atributo = atributos.back();
atributos.pop_back();
if (atributo == "cambia") {
cout << endl << "Comando [cambia]" << endl << "Despliega el nombre de un directorio o se cambia a otro especificado" << endl;
cout << "Ejemplo: cambia C:/Carpeta" << endl << endl ;
return;
} else if (atributo == "copia") {
cout << endl << "Comando [copia]" << endl << "Copia el contenido de un archivo a otro" << endl;
cout << "Ejemplo: copia archivo1.txt archivoNuevo.txt" << endl << endl;
return;
} else if (atributo == "borra") {
cout << endl << "Comando [borra]" << endl << "Elimina un archivo" << endl;
cout << "Ejemplo: borra archivo.txt" << endl << endl;
return;
} else if (atributo == "renombra") {
cout << endl << "Comando [renombra]" << endl << "Cambia el nombre de un archivo" << endl;
cout << "Ejemplo: renombra viejo.txt nuevo.txt " << endl << endl;
return;
} else if (atributo == "lista") {
cout << endl << "Comando [lista]" << endl << "Despliega el contenido de un directorio" << endl;
cout << "Ejemplo: lista (sin argumentos)" << endl << endl;
return;
} else if (atributo == "muestra") {
cout << endl << "Comando [muestra]" << endl << "Despliega por bloques en pantalla el contenido de un archivo" << endl;
cout << "Ejemplo: muestra archivo.txt" << endl << endl;
return;
} else if (atributo == "crea") {
cout << endl << "Comando [crea]" << endl << "Crea un directorio en la ruta en la que se encuentre ubicado" << endl;
cout << "Ejemplo: crea + enter luego el nombre de el directorio que desea crear" << endl << endl;
return;
} else if (atributo == "elimina") {
cout << endl << "Comando [elimina]" << endl << "elimina un directorio en la ruta en la que se encuentre ubicado" << endl;
cout << "Ejemplo: elimina + enter luego el nombre de el directorio que desea eliminar" << endl << endl;
return;
} else if (atributo == "actual") {
cout << endl << "Comando [actual]" << endl << "muestra la ruta donde se encuentra ubicado" << endl;
cout << "Ejemplo: actual + enter" << endl << endl;
return;
} else {
cout << endl << "[ Error: Atributo " << atributo << " no identificado ]" << endl;
}
}
}
}
//Cambia de directorio
void cambia(vector<string> atributos) {
string ruta = "";
if (atributos.empty()) {
cout << endl << "Error: Debes indicar una ruta valida" << endl << endl;
} else {
char path[100];
for (int c = 0; c < atributos.size(); c++)
ruta += atributos[c] + " ";
strcpy(path, ruta.c_str());
chdir(path); //llamamos a la funcion chdir, la cual hace el cambio de directorio segun le indiquemos.
}
}
//Copia un archivo a otro.
void copia(vector<string>atributos) {
char oldfile[20], newfile[20], aux[100];
if (atributos.size() > 2) {
cout << endl << "Error: Se han detectado mas de dos parametros , verifique que los nombres de archivo no contengan espacios." << endl << endl;
} else if (atributos.size() <= 1) {
cout << endl << "Error: Cantidad de parametros incorrecta. Vea ayuda + copia para mas informacion" << endl << endl;
} else {
strcpy(oldfile, atributos[0].c_str());
strcpy(newfile, atributos[1].c_str()); //Convertimos de string a char.
ifstream viejo(oldfile, ifstream::in);
ofstream nuevo(newfile, ofstream::out);
while (!viejo.eof()) {
viejo.getline(aux, 100);
nuevo << aux << endl;
}
cout << endl << "Archivo copiado exitosamente!!" << endl << endl;
}
}
//Elimina un archivo
void borra(vector<string>atributos) {
char file[20];
if (atributos.size() != 1) {
cout << endl << "Error: Cantidad de parametros incorrectos. Vea ayuda + borra para mas informacion. " << endl << endl;
} else {
strcpy(file, atributos[0].c_str()); //Convertimos de string a char.
if (remove(file) != 0)
cout << endl << "No se pudo eliminar el archivo. " << endl << endl;
else
cout << endl << "Archivo eliminado exitosamente! " << endl << endl;
}
}
//Renombra un archivo
void renombra(vector<string>atributos) {
if (atributos.size() != 2) {
cout << endl << "Error: Cantidad de parametros incorrecta. Verifique que los nombres de archivo no contengan espacios." << endl << endl;
} else {
copia(atributos);
atributos.pop_back();
borra(atributos);
cout << endl << "Archivo renombrado exitosamente!! " << endl << endl;
}
}
//Muestra un archivo por bloques en pantalla.
void muestra(vector<string>atributos) {
if (atributos.size() != 1) {
cout << endl << "Cantidad de parametros incorrecta. Vea ayuda + muestra para mas informacion. " << endl << endl;
} else {
char archivo[20], aux[100];
int c = 0;
strcpy(archivo, atributos[0].c_str()); //Convertimos de string a char.
ifstream fichero(archivo, ifstream::in);
if (fichero.is_open()) {
while (!fichero.eof()) {
fichero.getline(aux, 100);
cout << aux << endl;
if (c++ % 3 == 0) {
system("pause");
}
}
}
}
}
void crea(vector<string>atributos)
{
char ruta[255];
system("mkdir ruta");
system("cls");
cout << endl<< "El directorio fue creado\n" << endl << endl;
}
void elimina(vector<string>atributos)
{
char ruta[255];
system("rmdir ruta ");
system("cls");
cout << endl<< "El directorio fue eliminado\n" << endl << endl;
}
int main() {
string lectura = "";
string comando = "";
vector<string>atributos; //Vector donde almacenaremos los atributos o parametros de un comando.
char directorio[100]; //Aqui guardamos el directorio actual donde nos encontramos.
do {
getcwd(directorio, 100); //Llamando a la funcion getcwd nos devuelve el current path, directorio actual.
cout << directorio << ">"; //Imprimimos en pantalla el directorio.
getline(cin, lectura); //Leemos desde teclado y lo almacenamos en "lectura".
atributos = separaAtributos(lectura); //Separamos los atributos de la lectura. Y los almacenamos en el vector atributos.
comando = subCadena(lectura, 0, ' '); //Extraemos de la lectura la primera palabra que ser� el comando.
//Verificamos si la variable comando es igual a uno de nuestros comandos...
if (comando == "ayuda")
ayuda(atributos); //LLamamos al m�todo segun corresponda, pasandole como par�metro el vector atributos.
else if (comando == "cambia") //Cada metodo se encarga de tratar al vector atributos como sea su conveniencia.
cambia(atributos); //Aqu� unicamente le pasamos el vector con los parametros almacenados en
else if (comando == "copia") //cada espacio de memoria.
copia(atributos);
else if (comando == "lista")
system("dir");
else if (comando == "renombra")
renombra(atributos);
else if (comando == "borra")
borra(atributos);
else if (comando == "muestra")
muestra(atributos);
else if (comando == "crea")
crea (atributos);
else if (comando == "elimina")
elimina (atributos);
else if (comando == "actual")
system("pwd");
else
cout << endl << "Comando " << comando << " no identificado. Reintente." << endl << endl;
} while (comando != "salir");
system("exit");
}
En la ultimo antes del main tengo dos funciones resaltadas en negrita, una crea un directorio y la otra lo elimina pero no lo hacen con un nombre digitado por pantalla si no con uno fijo que yo le di "ruta" Alguna ayuda para que yo pueda darle el nombre al directorio que se valla a crear o eliminar, haciendo uso de los comando del programa.
Muchas gracias cualquier ayuda....
#include <iostream>
#include <string>
#include <direct.h>
#include <vector>
#include <fstream>
#include <stdio.h>
#include <windows.h>
using namespace std;
//Devuelve una subcadena indicando una posicion inicial y un caracter delimitador.
string subCadena(string cadena, int pos, char caracter) {
string subcadena = "";
while (cadena[pos] != caracter) {
subcadena += cadena[pos++];
if (pos >= cadena.size())
break;
}
return subcadena;
}
//Dado un string, le quita la primera palabra que es el comando y separa los parametros, los almacena en un vector y lo devuelve.
vector<string> separaAtributos(string lectura) {
vector<string>atributos;
atributos.clear();
string atributo;
for (int i = 0; i < lectura.length(); i++) {
if (lectura[i] == ' ') {
if (lectura[i + 1] != ' ') {
atributo = subCadena(lectura, i + 1, ' ');
atributos.push_back(atributo);
}
}
}
return atributos;
}
//Despliega la ayuda donde explica cada uno de los comandos.
void ayuda(vector<string>atributos) {
string atributo;
if (atributos.size() == 0) {
cout << endl << "[AYUDA GENERAL]" << endl << "Para obtener ayuda de un comando especifico teclee ayuda + comando " << endl;
cout << "[Comandos]" << endl << "- Cambia" << endl << "- Copia" << endl << "- Borra" << endl << "- Renombra" << endl;
cout << "- Lista" << endl << "- Muestra" << endl << "- Crea" << endl << "- Elimina"<< endl << "- Actual"<< endl << "- Salir"<< endl << endl;
} else {
while (!atributos.empty()) {
atributo = atributos.back();
atributos.pop_back();
if (atributo == "cambia") {
cout << endl << "Comando [cambia]" << endl << "Despliega el nombre de un directorio o se cambia a otro especificado" << endl;
cout << "Ejemplo: cambia C:/Carpeta" << endl << endl ;
return;
} else if (atributo == "copia") {
cout << endl << "Comando [copia]" << endl << "Copia el contenido de un archivo a otro" << endl;
cout << "Ejemplo: copia archivo1.txt archivoNuevo.txt" << endl << endl;
return;
} else if (atributo == "borra") {
cout << endl << "Comando [borra]" << endl << "Elimina un archivo" << endl;
cout << "Ejemplo: borra archivo.txt" << endl << endl;
return;
} else if (atributo == "renombra") {
cout << endl << "Comando [renombra]" << endl << "Cambia el nombre de un archivo" << endl;
cout << "Ejemplo: renombra viejo.txt nuevo.txt " << endl << endl;
return;
} else if (atributo == "lista") {
cout << endl << "Comando [lista]" << endl << "Despliega el contenido de un directorio" << endl;
cout << "Ejemplo: lista (sin argumentos)" << endl << endl;
return;
} else if (atributo == "muestra") {
cout << endl << "Comando [muestra]" << endl << "Despliega por bloques en pantalla el contenido de un archivo" << endl;
cout << "Ejemplo: muestra archivo.txt" << endl << endl;
return;
} else if (atributo == "crea") {
cout << endl << "Comando [crea]" << endl << "Crea un directorio en la ruta en la que se encuentre ubicado" << endl;
cout << "Ejemplo: crea + enter luego el nombre de el directorio que desea crear" << endl << endl;
return;
} else if (atributo == "elimina") {
cout << endl << "Comando [elimina]" << endl << "elimina un directorio en la ruta en la que se encuentre ubicado" << endl;
cout << "Ejemplo: elimina + enter luego el nombre de el directorio que desea eliminar" << endl << endl;
return;
} else if (atributo == "actual") {
cout << endl << "Comando [actual]" << endl << "muestra la ruta donde se encuentra ubicado" << endl;
cout << "Ejemplo: actual + enter" << endl << endl;
return;
} else {
cout << endl << "[ Error: Atributo " << atributo << " no identificado ]" << endl;
}
}
}
}
//Cambia de directorio
void cambia(vector<string> atributos) {
string ruta = "";
if (atributos.empty()) {
cout << endl << "Error: Debes indicar una ruta valida" << endl << endl;
} else {
char path[100];
for (int c = 0; c < atributos.size(); c++)
ruta += atributos[c] + " ";
strcpy(path, ruta.c_str());
chdir(path); //llamamos a la funcion chdir, la cual hace el cambio de directorio segun le indiquemos.
}
}
//Copia un archivo a otro.
void copia(vector<string>atributos) {
char oldfile[20], newfile[20], aux[100];
if (atributos.size() > 2) {
cout << endl << "Error: Se han detectado mas de dos parametros , verifique que los nombres de archivo no contengan espacios." << endl << endl;
} else if (atributos.size() <= 1) {
cout << endl << "Error: Cantidad de parametros incorrecta. Vea ayuda + copia para mas informacion" << endl << endl;
} else {
strcpy(oldfile, atributos[0].c_str());
strcpy(newfile, atributos[1].c_str()); //Convertimos de string a char.
ifstream viejo(oldfile, ifstream::in);
ofstream nuevo(newfile, ofstream::out);
while (!viejo.eof()) {
viejo.getline(aux, 100);
nuevo << aux << endl;
}
cout << endl << "Archivo copiado exitosamente!!" << endl << endl;
}
}
//Elimina un archivo
void borra(vector<string>atributos) {
char file[20];
if (atributos.size() != 1) {
cout << endl << "Error: Cantidad de parametros incorrectos. Vea ayuda + borra para mas informacion. " << endl << endl;
} else {
strcpy(file, atributos[0].c_str()); //Convertimos de string a char.
if (remove(file) != 0)
cout << endl << "No se pudo eliminar el archivo. " << endl << endl;
else
cout << endl << "Archivo eliminado exitosamente! " << endl << endl;
}
}
//Renombra un archivo
void renombra(vector<string>atributos) {
if (atributos.size() != 2) {
cout << endl << "Error: Cantidad de parametros incorrecta. Verifique que los nombres de archivo no contengan espacios." << endl << endl;
} else {
copia(atributos);
atributos.pop_back();
borra(atributos);
cout << endl << "Archivo renombrado exitosamente!! " << endl << endl;
}
}
//Muestra un archivo por bloques en pantalla.
void muestra(vector<string>atributos) {
if (atributos.size() != 1) {
cout << endl << "Cantidad de parametros incorrecta. Vea ayuda + muestra para mas informacion. " << endl << endl;
} else {
char archivo[20], aux[100];
int c = 0;
strcpy(archivo, atributos[0].c_str()); //Convertimos de string a char.
ifstream fichero(archivo, ifstream::in);
if (fichero.is_open()) {
while (!fichero.eof()) {
fichero.getline(aux, 100);
cout << aux << endl;
if (c++ % 3 == 0) {
system("pause");
}
}
}
}
}
void crea(vector<string>atributos)
{
char ruta[255];
system("mkdir ruta");
system("cls");
cout << endl<< "El directorio fue creado\n" << endl << endl;
}
void elimina(vector<string>atributos)
{
char ruta[255];
system("rmdir ruta ");
system("cls");
cout << endl<< "El directorio fue eliminado\n" << endl << endl;
}
int main() {
string lectura = "";
string comando = "";
vector<string>atributos; //Vector donde almacenaremos los atributos o parametros de un comando.
char directorio[100]; //Aqui guardamos el directorio actual donde nos encontramos.
do {
getcwd(directorio, 100); //Llamando a la funcion getcwd nos devuelve el current path, directorio actual.
cout << directorio << ">"; //Imprimimos en pantalla el directorio.
getline(cin, lectura); //Leemos desde teclado y lo almacenamos en "lectura".
atributos = separaAtributos(lectura); //Separamos los atributos de la lectura. Y los almacenamos en el vector atributos.
comando = subCadena(lectura, 0, ' '); //Extraemos de la lectura la primera palabra que ser� el comando.
//Verificamos si la variable comando es igual a uno de nuestros comandos...
if (comando == "ayuda")
ayuda(atributos); //LLamamos al m�todo segun corresponda, pasandole como par�metro el vector atributos.
else if (comando == "cambia") //Cada metodo se encarga de tratar al vector atributos como sea su conveniencia.
cambia(atributos); //Aqu� unicamente le pasamos el vector con los parametros almacenados en
else if (comando == "copia") //cada espacio de memoria.
copia(atributos);
else if (comando == "lista")
system("dir");
else if (comando == "renombra")
renombra(atributos);
else if (comando == "borra")
borra(atributos);
else if (comando == "muestra")
muestra(atributos);
else if (comando == "crea")
crea (atributos);
else if (comando == "elimina")
elimina (atributos);
else if (comando == "actual")
system("pwd");
else
cout << endl << "Comando " << comando << " no identificado. Reintente." << endl << endl;
} while (comando != "salir");
system("exit");
}
Valora esta pregunta


0