2012-03-29 15 views
13

¿Cómo puedo hacer un directorio/carpeta con C++. Intenté usar el mkdir() sin éxito. Quiero escribir un programa que cin sea una variable y luego use esta variable para crear subdirectorios y archivos con esos. mi código actual. Se dice que el operador + en el mkdir() dice error de ningún operandoCómo crear una carpeta/directorio

char newFolder[20]; 

cout << "Enter name of new project without spaces:\n"; 
cin >> newFolder; 
string files[] = {"index.php"}; 
string dir[] = {"/images","/includes","/includes/js","/contact","about"}; 

for (int i = 0; i<=5; i++){ 
mkdir(newFolder + dir[i]); 
ofstream write ("index/index.php"); 
write << "<?php \n \n \n ?>"; 
write.close(); 
} 
+1

'mkdir()' es la manera correcta de hacerlo, al menos en un sistema POSIX. ¿Qué pasó cuando lo intentaste? – Wyzard

Respuesta

12

Es necesario #include <string>, los operadores std::string se definen en esa cabecera.

El resultado de la expresión newFolder + dir[i] es un std::string, y mkdir() toma un const char*. Cambiar a:

mkdir((newFolder + dir[i]).c_str()); 

Comprobar el valor de retorno de mkdir() para asegurar el éxito, si no uso strerror(errno) para obtener la razón del fracaso.

Este accede a más allá del final de la matriz dir:

for (int i = 0; i<=5; i++){ 
    mkdir(newFolder + dir[i]); 

hay 5 elementos en dir, por lo que los índices legales son 0-4. Cambiar a:

for (int i = 0; i<5; i++){ 
    mkdir(newFolder + dir[i]); 

Uso std::string para newFolder, en lugar de char[20]:

std::string newFolder; 

entonces no tienen otra preocupación por una carpeta de más de 19 caracteres (1 requeridas para terminador nulo) que se ingresa.

+0

Gracias por su ayuda, cambié la condición para pero todavía dice lo mismo, no puedo pasar el error para ver ningún resultado. – Cjueden

+0

Gracias de nuevo, pero el + en el mkdir todavía está equivocado, dice que ningún operador "+" coincide con estos operandos – Cjueden

+1

@Cjueden, respuesta actualizada: '#include ' – hmjd