2012-03-29 27 views
13

Jak utworzyć katalog/folder za pomocą C++. Próbowałem użyć mkdir() bez powodzenia. Chcę napisać program, który jest zmienną, a następnie używa tej zmiennej do stworzenia podkatalogu i plików z tymi. mój obecny kod. Mówi operator + w mkdir() mówi o błędzie nie operandJak utworzyć folder/katalog

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()' jest właściwym sposobem, przynajmniej w systemie POSIX. Co się stało, gdy próbowałeś? – Wyzard

Odpowiedz

12

Trzeba #include <string>, że std::string operatorzy są zdefiniowane w tym cel.

Wynik wyrażenia newFolder + dir[i] jest std::string, a mkdir() trwa const char*. Przejdź do:

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

sprawdzić wartość powrót mkdir() aby zapewnić sukces, jeśli nie używać strerror(errno) uzyskanie przyczynę awarii.

Ten dostęp poza koniec tablicy dir:

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

istnieją 5 elementy dir, więc indeksy prawne są od 0 do 4. Przejdź do:

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

użytkowania std::string dla newFolder zamiast char[20]:

std::string newFolder; 

Wtedy nie masz zaniepokojenie folderu więcej niż 19 znaków (1 wymaganych do zerowej terminator) są wpisane.

+0

Dziękuję za pomoc, zmieniłem warunek dla, ale nadal mówi to samo, nie mogę ominąć błędu, aby zobaczyć jakiekolwiek wyjście. – Cjueden

+0

Ponownie dziękuję, ale + w mkdir nadal błąd, mówi, że żaden operator "+" nie odpowiada tych operandów – Cjueden

+1

@ Cjueden, zaktualizowana odpowiedź: '#include ' – hmjd