本文整理汇总了C++中str::Str::AppendChecked方法的典型用法代码示例。如果您正苦于以下问题:C++ Str::AppendChecked方法的具体用法?C++ Str::AppendChecked怎么用?C++ Str::AppendChecked使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类str::Str
的用法示例。
在下文中一共展示了Str::AppendChecked方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: AppendEntry
static bool AppendEntry(str::Str<char>& data, str::Str<char>& content, const WCHAR *filePath, const char *inArchiveName, lzma::FileInfo *fi=NULL)
{
size_t nameLen = str::Len(inArchiveName);
CrashIf(nameLen > UINT32_MAX - 25);
uint32_t headerSize = 25 + (uint32_t)nameLen;
FILETIME ft = file::GetModificationTime(filePath);
if (fi && FileTimeEq(ft, fi->ftModified)) {
ReusePrevious:
ByteWriterLE meta(data.AppendBlanks(24), 24);
meta.Write32(headerSize);
meta.Write32(fi->compressedSize);
meta.Write32(fi->uncompressedSize);
meta.Write32(fi->uncompressedCrc32);
meta.Write32(ft.dwLowDateTime);
meta.Write32(ft.dwHighDateTime);
data.Append(inArchiveName, nameLen + 1);
return content.AppendChecked(fi->compressedData, fi->compressedSize);
}
size_t fileDataLen;
ScopedMem<char> fileData(file::ReadAll(filePath, &fileDataLen));
if (!fileData || fileDataLen >= UINT32_MAX) {
fprintf(stderr, "Failed to read \"%S\" for compression\n", filePath);
return false;
}
uint32_t fileDataCrc = crc32(0, (const uint8_t *)fileData.Get(), (uint32_t)fileDataLen);
if (fi && fi->uncompressedCrc32 == fileDataCrc && fi->uncompressedSize == fileDataLen)
goto ReusePrevious;
size_t compressedSize = fileDataLen + 1;
ScopedMem<char> compressed((char *)malloc(compressedSize));
if (!compressed)
return false;
if (!Compress(fileData, fileDataLen, compressed, &compressedSize))
return false;
ByteWriterLE meta(data.AppendBlanks(24), 24);
meta.Write32(headerSize);
meta.Write32((uint32_t)compressedSize);
meta.Write32((uint32_t)fileDataLen);
meta.Write32(fileDataCrc);
meta.Write32(ft.dwLowDateTime);
meta.Write32(ft.dwHighDateTime);
data.Append(inArchiveName, nameLen + 1);
return content.AppendChecked(compressed, compressedSize);
}