QString OPMLWriter::Write (const channels_shorts_t& channels, const QString& title, const QString& owner, const QString& ownerEmail) const { QDomDocument doc; QDomElement root = doc.createElement ("opml"); doc.appendChild (root); WriteHead (root, doc, title, owner, ownerEmail); WriteBody (root, doc, channels); return doc.toString (); }
void Logger::WriteTrace(LogLevel level,const char* file,int line,const char* function,const char* format,...) { int offset=WriteHead(_buffer,MaxLogSize,level); offset+=WriteTrace(_buffer+offset,MaxLogSize-offset,file,line,function); va_list args; va_start(args, format); vsnprintf(_buffer+offset,MaxLogSize-offset, format, args); va_end(args); _writers[level]->Write(_buffer); if(_showInConsole) { cout<<_buffer; } }
static void _CloseArchive(ArchiveHandle *AH) { if (AH->mode == archModeWrite) { WriteHead(AH); WriteToc(AH); if (fclose(AH->FH) != 0) die_horribly(AH, modulename, "could not close TOC file: %s\n", strerror(errno)); WriteDataChunks(AH); } AH->FH = NULL; }
void Logger::WriteMessage(LogLevel level,const char* format,...) { if(level==LogLevel_Debug&&!_debugEnabled) { return; } int offset=WriteHead(_buffer,MaxLogSize,level); va_list args; va_start(args, format); vsnprintf(_buffer+offset,MaxLogSize-offset, format, args); va_end(args); _writers[level]->Write(_buffer); if(_showInConsole) { cout<<_buffer; } }
/*压缩函数,可实现将字符的哈弗曼编码存入压缩后的文件头,内容压缩后继续存进文档。*/ int ZipFile(const char *sourceFileName, const char *targetFileName) { FILE *sourceFp = NULL, *targetFp = NULL; DataCode dataCodeArr[CODE_SIZE]; USHORT writeCodeLen, i; UCHAR writeCode[CHAR_BIT], readData, writeData, lastBtyeLen; fpos_t lastBtyePos; if((sourceFp = fopen(sourceFileName, "rb")) == NULL) { printf("打开%s文件错误! ", sourceFileName); return 1; } if((targetFp = fopen(targetFileName, "w+b")) == NULL) { printf("打开%s文件错误! ", targetFileName); fclose(sourceFp); return 1; } GetFileHuffmanCode(sourceFp, dataCodeArr); WriteHead(targetFp, dataCodeArr); lastBtyeLen = 0; fgetpos(targetFp, &lastBtyePos); /* 记录位子 后面得到长度信息后 再在这里写 */ fwrite(&lastBtyeLen, UCHAR_SIZE, 1, targetFp); /* 对源数据进行编码转换 并写入目标文件中 */ memset(writeCode, 0, CHAR_BIT); writeCodeLen = 0; fseek(sourceFp, 0L, SEEK_SET); while(!feof(sourceFp)) { /*读入字节,遍历找到编码转存。*/ fread(&readData, UCHAR_SIZE, 1, sourceFp); for(i = 0; i < dataCodeArr[readData].len; i++) { writeCode[writeCodeLen++] = dataCodeArr[readData].pCode[i]; /*每攒够一个字节长度的编码即转存*/ if(writeCodeLen >= CHAR_BIT) { writeData = ConvertToCodeData(writeCode); fwrite(&writeData, UCHAR_SIZE, 1, targetFp); memset(writeCode, 0, UCHAR_SIZE * CHAR_BIT); writeCodeLen = 0; } } } /* 把剩余的不足一字节写入文件 */ if(writeCodeLen != 0) { writeData = ConvertToCodeData(writeCode); fwrite(&writeData, UCHAR_SIZE, 1, targetFp); } lastBtyeLen = writeCodeLen; fsetpos(targetFp, &lastBtyePos); fwrite(&lastBtyeLen, UCHAR_SIZE, 1, targetFp); /* 清理 */ for(i = 0; i < CODE_SIZE; ++i) { if(dataCodeArr[i].pCode != NULL) { free(dataCodeArr[i].pCode); dataCodeArr[i].pCode = NULL; } } fclose(sourceFp); fclose(targetFp); return 0; }