Beispiel #1
0
			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 ();
			}
Beispiel #2
0
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;
	}
}
Beispiel #3
0
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;
}
Beispiel #4
0
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;
}