archive_entry_copy_statをしないとアーカイブがうまく作成できず。
#include <stdio.h> #include <fcntl.h> #include <sys/types.h> #include <sys/stat.h> #include <io.h> #include <share.h> #include <archive.h> #include <archive_entry.h> int main() { struct archive *a; struct archive_entry *ae; int fd, len; char buff[BUFSIZ]; struct stat s; a = archive_write_new(); archive_write_set_compression_none(a); archive_write_set_format_ustar(a); archive_write_open_file(a, "C:\\foo.tar"); ae = archive_entry_new(); stat("C:\\inclick.txt", &s); archive_entry_copy_stat(ae, &s); archive_entry_copy_pathname(ae, "inclick.txt"); archive_write_header(a, ae); _sopen_s(&fd, "C:\\inclick.txt", O_RDONLY | O_BINARY, _SH_DENYWR, _S_IREAD); len = _read(fd, buff, sizeof(buff)); while (len > 0) { archive_write_data(a, buff, len); len = _read(fd, buff, sizeof(buff)); } _close(fd); archive_entry_free(ae); archive_write_close(a); archive_write_finish(a); return 0; }
_sopen_sはなんで似たよーなフラグをたくさん渡すんだろう?