2009-09-03 39 views
9

cách thuận tiện để tạo thư mục khi đường dẫn như thế này được cung cấp: "\ server \ foo \ bar \"C++ cách tạo thư mục từ đường dẫn

lưu ý rằng các thư mục trung gian có thể không tồn tại .

CreateDirectory và mkdir dường như chỉ tạo phần cuối của thư mục và đưa ra một lỗi khác.

nền tảng là cửa sổ, trình biên dịch MSVC.

cảm ơn!

Trả lời

7

SHCreateDirectoryEx() có thể làm điều đó. Nó có sẵn trên XP SP2 và các phiên bản Windows mới hơn.

+2

Không được chấp nhận: "[Chức năng này có sẵn thông qua Windows XP Gói Dịch vụ 2 (SP2) và Windows Server 2003. Có thể bị thay đổi hoặc không có sẵn trong các phiên bản Windows tiếp theo.]" – Technophile

+2

@Technophile - Theo MSDN, 'SHCreateDirectory' không được chấp nhận sau XP SP2 & Server 2003 (http://msdn.microsoft.com/en-us/library/bb762130(v=vs.85).aspx). Nó không đề cập đến 'SHCreateDirectoryEx' không được chấp nhận. – Ferruccio

+1

Có vẻ như SHCreateDirectory ** Ex ** cũng không còn được dùng nữa: msdn.microsoft.com/en-us/library/bb762131(v=vs.85).aspx – sergiol

1

Tôi muốn viết một vòng lặp. Tách đường dẫn thành các thành phần và "đi bộ", tức là bắt đầu từ đầu, kiểm tra xem nó có tồn tại hay không. Nếu có, hãy nhập và tiếp tục. Nếu không, hãy tạo, nhập và tiếp tục. Đối với điểm thưởng, hãy phát hiện xem một thành phần có tồn tại hay không, nhưng là một tệp chứ không phải là một thư mục.

+0

cảm ơn, ý tưởng hay. mặc dù tôi sẽ mong đợi một chức năng trong winapi hoặc stl mà thực hiện chính xác điều này? – clamp

24

Nếu bạn có thể sử dụng một thư viện bên ngoài, tôi muốn nhìn vào boost::filesystem

#include <boost/filesystem.hpp> 
namespace fs=boost::filesystem; 

int main(int argc, char** argv) 
{ 
    fs::create_directories("/some/path"); 
} 
0

Bạn cũng có thể sử dụng create_directories mẫu bool (const Đường dẫn & p) từ Boost::Filesystem thư viện. Và nó có sẵn không chỉ trong Windows.

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