2012-03-29 59 views
13

Làm cách nào để tạo thư mục/thư mục với C++. Tôi đã cố gắng sử dụng mkdir() mà không thành công. Tôi muốn viết một chương trình mà cin là một biến và sau đó sử dụng biến này để tạo các thư mục con và các tệp có trong đó. mã hiện tại của tôi. Nó nói các nhà điều hành + trong mkdir() cho biết lỗi không toán hạngCách tạo thư mục/thư mục

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()' là cách phù hợp để thực hiện, ít nhất là trên hệ thống POSIX. Điều gì đã xảy ra khi bạn thử nó? – Wyzard

Trả lời

12

Bạn cần phải #include <string>, các nhà khai thác std::string được định nghĩa trong tiêu đề đó.

Kết quả của biểu thức newFolder + dir[i]std::stringmkdir() mất const char*. Thay đổi thành:

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

Kiểm tra giá trị trả về của mkdir() để đảm bảo thành công, nếu không sử dụng strerror(errno) để có được những lý do cho sự thất bại.

này truy cập vượt quá cuối của mảng dir:

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

5 yếu tố trong dir, vì vậy chỉ số quy phạm pháp luật là 0-4. Thay đổi thành:

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

Sử dụng std::string cho newFolder, chứ không phải là char[20]:

std::string newFolder; 

Sau đó, bạn không có lo ngại về một thư mục của hơn 19 ký tự (1 cần cho terminator null) được nhập.

+0

Cảm ơn sự giúp đỡ của bạn, tôi đã thay đổi điều kiện nhưng vẫn nói điều tương tự, tôi không thể vượt qua lỗi để xem bất kỳ đầu ra nào. – Cjueden

+0

Một lần nữa cảm ơn bạn nhưng dấu + trong mkdir vẫn đang báo lỗi rằng không có toán tử "+" nào khớp với các toán hạng này – Cjueden

+1

@Cjueden, câu trả lời được cập nhật: '#include ' – hmjd

Các vấn đề liên quan