本文整理汇总了C++中ZipEntry::initNew方法的典型用法代码示例。如果您正苦于以下问题:C++ ZipEntry::initNew方法的具体用法?C++ ZipEntry::initNew怎么用?C++ ZipEntry::initNew使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ZipEntry
的用法示例。
在下文中一共展示了ZipEntry::initNew方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: addCommon
/*
* Add a new file to the archive.
*
* This requires creating and populating a ZipEntry structure, and copying
* the data into the file at the appropriate position. The "appropriate
* position" is the current location of the central directory, which we
* casually overwrite (we can put it back later).
*
* If we were concerned about safety, we would want to make all changes
* in a temp file and then overwrite the original after everything was
* safely written. Not really a concern for us.
*/
status_t ZipFile::addCommon(const char* fileName, const void* data, size_t size,
const char* storageName, int sourceType, int compressionMethod,
ZipEntry** ppEntry)
{
ZipEntry* pEntry = NULL;
status_t result = NO_ERROR;
long lfhPosn, startPosn, endPosn, uncompressedLen;
FILE* inputFp = NULL;
unsigned long crc;
time_t modWhen;
if (mReadOnly)
return INVALID_OPERATION;
assert(compressionMethod == ZipEntry::kCompressDeflated ||
compressionMethod == ZipEntry::kCompressStored);
/* make sure we're in a reasonable state */
assert(mZipFp != NULL);
assert(mEntries.size() == mEOCD.mTotalNumEntries);
/* make sure it doesn't already exist */
if (getEntryByName(storageName) != NULL)
return ALREADY_EXISTS;
if (!data) {
inputFp = fopen(fileName, FILE_OPEN_RO);
if (inputFp == NULL)
return errnoToStatus(errno);
}
if (fseek(mZipFp, mEOCD.mCentralDirOffset, SEEK_SET) != 0) {
result = UNKNOWN_ERROR;
goto bail;
}
pEntry = new ZipEntry;
pEntry->initNew(storageName, NULL);
/*
* From here on out, failures are more interesting.
*/
mNeedCDRewrite = true;
/*
* Write the LFH, even though it's still mostly blank. We need it
* as a place-holder. In theory the LFH isn't necessary, but in
* practice some utilities demand it.
*/
lfhPosn = ftell(mZipFp);
pEntry->mLFH.write(mZipFp);
startPosn = ftell(mZipFp);
/*
* Copy the data in, possibly compressing it as we go.
*/
if (sourceType == ZipEntry::kCompressStored) {
if (compressionMethod == ZipEntry::kCompressDeflated) {
bool failed = false;
result = compressFpToFp(mZipFp, inputFp, data, size, &crc);
if (result != NO_ERROR) {
LOGD("compression failed, storing\n");
failed = true;
} else {
/*
* Make sure it has compressed "enough". This probably ought
* to be set through an API call, but I don't expect our
* criteria to change over time.
*/
long src = inputFp ? ftell(inputFp) : size;
long dst = ftell(mZipFp) - startPosn;
if (dst + (dst / 10) > src) {
LOGD("insufficient compression (src=%ld dst=%ld), storing\n",
src, dst);
failed = true;
}
}
if (failed) {
compressionMethod = ZipEntry::kCompressStored;
if (inputFp) rewind(inputFp);
fseek(mZipFp, startPosn, SEEK_SET);
/* fall through to kCompressStored case */
}
}
/* handle "no compression" request, or failed compression from above */
if (compressionMethod == ZipEntry::kCompressStored) {
if (inputFp) {
//.........这里部分代码省略.........