我正在尝试使用Visual Studio 2017中的 libzip 库提取 zip 文件。我编写了C ++程序来提取 .zip 文件。
我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>
#include <limits.h>
#include <io.h>
#include <zip.h>
#include <direct.h>
#include <windows.h>
static void safe_create_dir(const char *dir)
{
if (_mkdir(dir) < 0) {
if (errno != EEXIST) {
perror(dir);
exit(1);
}
}
}
int main(int argc, char *argv[])
{
const char *archive;
struct zip *za;
struct zip_file *zf;
struct zip_stat sb;
char buf[100];
int err;
int i, len;
int fd;
long long sum;
if (argc != 2)
{
return 1;
}
archive = argv[1];
if ((za = zip_open(archive, 0, &err)) == NULL)
{
zip_error_to_str(buf, sizeof(buf), err, errno);
return 1;
}
for (i = 0; i < zip_get_num_entries(za, 0); i++)
{
if (zip_stat_index(za, i, 0, &sb) == 0)
{
len = strlen(sb.name);
if (sb.name[len - 1] == '/') {
safe_create_dir(sb.name);
}
else
{
zf = zip_fopen_index(za, i, 0);
fd = _open(sb.name, O_RDWR | O_TRUNC | O_CREAT, 0644);
sum = 0;
while (sum != sb.size)
{
len = zip_fread(zf, buf, 100);
_write(fd, buf, len);
sum += len;
}
_close(fd);
zip_fclose(zf);
}
}
else
{
printf("File[%s] Line[%d]/n", __FILE__, __LINE__);
}
}
zip_close(za);
return 0;
}
但是,我在zip_stat_index(za, i, 0, &sb)
函数中遇到访问冲突错误:
Exception thrown at 0x00000001 in Application.exe: 0xC0000005: Access violation executing location 0x00000001.
为什么会出现此错误?我在这里想念什么?