2012-03-29 22 views
13

Come creare una directory/cartella con C++. Ho provato a usare il mkdir() senza successo. Voglio scrivere un programma che cin sia una variabile e quindi usi questa variabile per creare sottodirectory e file con quelli. il mio codice attuale. Si dice che l'operatore + in mkdir() dice errore non operandoCome creare una cartella/directory

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()' è il modo giusto per farlo, almeno su un sistema POSIX. Cosa è successo quando l'hai provato? – Wyzard

risposta

12

È necessario #include <string>, i std::string operatori sono definiti in quel colpo di testa.

Il risultato dell'espressione newFolder + dir[i] è un std::string e mkdir() prende un const char*. Passare:

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

Controllare il valore di ritorno di mkdir() per garantire il successo, se non utilizzare strerror(errno) per ottenere il motivo per il fallimento.

Questa accede oltre la fine della matrice dir:

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

ci sono 5 elementi dir, così indici sono quelli compresi tra 0 a 4. Passare:

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

Usa std::string per newFolder, piuttosto che char[20]:

std::string newFolder; 

allora non hai preoccupazione per una cartella di più di 19 caratteri (1 richiesti per terminatore null) viene inserito.

+0

Grazie per il vostro aiuto, ho cambiato la condizione for, ma continua a dire la stessa cosa, non riesco a superare l'errore per vedere qualsiasi output. – Cjueden

+0

Ancora grazie ma il + nel mkdir continua a segnalare che nessun operatore "+" corrisponde a questi operandi – Cjueden

+1

@Cjueden, risposta aggiornata: '#include ' – hmjd