当前位置: 首页>>代码示例>>C++>>正文


C++ IArchive::GetFile方法代码示例

本文整理汇总了C++中IArchive::GetFile方法的典型用法代码示例。如果您正苦于以下问题:C++ IArchive::GetFile方法的具体用法?C++ IArchive::GetFile怎么用?C++ IArchive::GetFile使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在IArchive的用法示例。


在下文中一共展示了IArchive::GetFile方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: extract

bool CFileSystem::extract(const std::string& filename, const std::string& dstdir)
{
#ifdef ARCHIVE_SUPPORT
	LOG_INFO("Extracting %s to %s", filename.c_str(), dstdir.c_str());
	const int len = filename.length();
	IArchive* archive;
	if ((len>4) && (filename.compare(len-3, 3,".7z") == 0 ) ) {
		archive = new CSevenZipArchive(filename);
	} else {
		archive = new CZipArchive(filename);
	}

	const unsigned int num = archive->NumFiles();
	for (unsigned int i=0; i<num; i++) {
		std::vector<unsigned char> buf;
		std::string name;
		int size, mode;
		archive->FileInfo(i,name, size, mode);
		if (!archive->GetFile(i, buf)) {
			LOG_ERROR("Error extracting %s from %s", name.c_str(), filename.c_str());
			delete archive;
			return false;
		}
#ifdef WIN32
		for(unsigned int i=0; i<name.length(); i++) { //replace / with \ on win32
			if (name[i] == '/')
				name[i]=PATH_DELIMITER;
		}
#endif
		std::string tmp = dstdir + PATH_DELIMITER;
		tmp += name.c_str(); //FIXME: concating UTF-16
		createSubdirs(tmp);
		if (fileSystem->fileExists(tmp)) {
			LOG_ERROR("File already exists: %s", tmp.c_str());
			continue;
		}
		LOG_INFO("extracting (%s)", tmp.c_str());
		FILE* f=fopen(tmp.c_str(), "wb+");
		if (f == NULL) {
			LOG_ERROR("Error creating %s", tmp.c_str());
			delete archive;
			return false;
		}
		int res=1;
		if (!buf.empty())
			res = fwrite(&buf[0], buf.size(), 1,f);
#ifndef WIN32
		fchmod(fileno(f), mode);
#endif
		if (res<=0) {
			const int err=ferror(f);
			LOG_ERROR("fwrite(%s): %d %s",name.c_str(), err, strerror(err));
			fclose(f);
			delete archive;
			return false;
		}
		fclose(f);
	}
	delete archive;
	LOG_INFO("done");
	return true;
#else
	LOG_ERROR("no archive support!");
	return false;
#endif
}
开发者ID:N0U,项目名称:pr-downloader,代码行数:66,代码来源:FileSystem.cpp


注:本文中的IArchive::GetFile方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。