2011-12-05 35 views
7

Tôi có một tệp tar tôi muốn trích xuất bằng libarchive vào một thư mục cụ thể. Làm thế nào tôi có thể làm cho chiết xuất libarchive vào bất kỳ thư mục tôi muốn? Tại thời điểm này, luôn luôn trích xuất vào thư mục làm việc của chương trình của tôi. Tôi nhìn vào this answer nhưng tất cả điều này làm là thay đổi vị trí của một mục lưu trữ trong kho lưu trữ, nghĩa là nó vẫn trích xuất vào thư mục làm việc của chương trình của tôi chỉ ở một thư mục con khác.libarchive - Trích xuất vào thư mục được chỉ định

+0

Cách duy nhất tôi có thể lấy nó để trích xuất nơi tôi muốn là bằng cách thay đổi thư mục làm việc của chương trình của tôi thành giám đốc mong muốn của tôi y, làm công việc giải nén với libarchive, và sau đó thay đổi nó trở lại. Đây là bẩn mặc dù – oggmonster

Trả lời

6

Từ diễn đàn thảo luận libarchive:

"Nó phụ thuộc, tất nhiên, trên các kho lưu trữ được chiết xuất

Thông thường, bạn sẽ chdir() vào thư mục nơi bạn muốn đầu ra để đi, sau đó. sử dụng mã tương tự như trong các trang Wiki Ví dụ:

A Complete Extractor Example

hoặc trong chương trình mẫu untar.c:

untar Example

Tất nhiên, nếu file tar bạn giải nén có tên tập tin thú vị (chẳng hạn như "c: \ someotherdirectory"), sau đó bạn sẽ cần phải chơi với các tên tập tin như bạn giải nén.

Lưu ý rằng tất cả các ví dụ đều sử dụng archive_read_next_header() để lấy đối tượng mục nhập từ lưu trữ đầu vào mô tả mục nhập tiếp theo; sau đó bạn được tự do chỉnh sửa mô tả mục nhập theo bất kỳ cách nào bạn muốn - cụ thể là bạn có thể thay đổi tên, chủ sở hữu hoặc quyền của - trước khi gọi archive_write_header() để tạo lại mục nhập trên đĩa.

Trang Ví dụ trong Wiki trên có lẽ là nơi tốt nhất để bắt đầu "

12

tôi giải quyết vấn đề này cách tiếp theo:. (chèn mã này trước khi gọi 'archive_write_header' chức năng)

const char* currentFile = archive_entry_pathname(archiveEntry); 
    const std::string fullOutputPath = destination + currentFile; 
    archive_entry_set_pathname(archiveEntry, fullOutputPath.c_str()); 

nơi destination là đường dẫn đầu ra Và nó hoạt động

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