本文整理汇总了C++中CNativeW::AppendNativeData方法的典型用法代码示例。如果您正苦于以下问题:C++ CNativeW::AppendNativeData方法的具体用法?C++ CNativeW::AppendNativeData怎么用?C++ CNativeW::AppendNativeData使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CNativeW
的用法示例。
在下文中一共展示了CNativeW::AppendNativeData方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: WriteFile_From_CDocLineMgr
/*! バッファ内容をファイルに書き出す (テスト用)
@note Windows用にコーディングしてある
@date 2003.07.26 ryoji BOM引数追加
*/
EConvertResult CWriteManager::WriteFile_From_CDocLineMgr(
const CDocLineMgr& pcDocLineMgr, //!< [in]
const SSaveInfo& sSaveInfo //!< [in]
)
{
EConvertResult nRetVal = RESULT_COMPLETE;
std::auto_ptr<CCodeBase> pcCodeBase( CCodeFactory::CreateCodeBase(sSaveInfo.eCharCode,0) );
{
// 変換テスト
CNativeW buffer = L"abcde";
CMemory tmp;
EConvertResult e = pcCodeBase->UnicodeToCode( buffer, &tmp );
if(e==RESULT_FAILURE){
nRetVal=RESULT_FAILURE;
ErrorMessage(
CEditWnd::getInstance()->GetHwnd(),
LS(STR_FILESAVE_CONVERT_ERROR),
sSaveInfo.cFilePath.c_str()
);
return nRetVal;
}
}
try
{
//ファイルオープン
CBinaryOutputStream out(sSaveInfo.cFilePath,true);
//各行出力
int nLineNumber = 0;
const CDocLine* pcDocLine = pcDocLineMgr.GetDocLineTop();
// 1行目
{
++nLineNumber;
CMemory cmemOutputBuffer;
{
CNativeW cstrSrc;
CMemory cstrBomCheck;
pcCodeBase->GetBom( &cstrBomCheck );
if( sSaveInfo.bBomExist && 0 < cstrBomCheck.GetRawLength() ){
// 1行目にはBOMを付加する。エンコーダでbomがある場合のみ付加する。
CUnicode().GetBom( cstrSrc._GetMemory() );
}
if( pcDocLine ){
cstrSrc.AppendNativeData( pcDocLine->_GetDocLineDataWithEOL() );
}
EConvertResult e = pcCodeBase->UnicodeToCode( cstrSrc, &cmemOutputBuffer );
if(e==RESULT_LOSESOME){
nRetVal=RESULT_LOSESOME;
}
if(e==RESULT_FAILURE){
nRetVal=RESULT_FAILURE;
ErrorMessage(
CEditWnd::getInstance()->GetHwnd(),
LS(STR_FILESAVE_CONVERT_ERROR),
sSaveInfo.cFilePath.c_str()
);
throw CError_FileWrite();
}
}
out.Write(cmemOutputBuffer.GetRawPtr(), cmemOutputBuffer.GetRawLength());
if( pcDocLine ){
pcDocLine = pcDocLine->GetNextLine();
}
}
CMemory cmemOutputBuffer;
while( pcDocLine ){
++nLineNumber;
//経過通知
if(pcDocLineMgr.GetLineCount()>0 && nLineNumber%1024==0){
NotifyProgress(nLineNumber * 100 / pcDocLineMgr.GetLineCount());
// 処理中のユーザー操作を可能にする
if( !::BlockingHook( NULL ) ){
throw CAppExitException(); //中断検出
}
}
//1行出力 -> cmemOutputBuffer
{
// 書き込み時のコード変換 cstrSrc -> cmemOutputBuffer
EConvertResult e = pcCodeBase->UnicodeToCode(
pcDocLine->_GetDocLineDataWithEOL(),
&cmemOutputBuffer
);
if(e==RESULT_LOSESOME){
if(nRetVal==RESULT_COMPLETE)nRetVal=RESULT_LOSESOME;
}
if(e==RESULT_FAILURE){
nRetVal=RESULT_FAILURE;
ErrorMessage(
CEditWnd::getInstance()->GetHwnd(),
LS(STR_FILESAVE_CONVERT_ERROR),
//.........这里部分代码省略.........
示例2: ReplaceData
//.........这里部分代码省略.........
}
/* 次の行がある */
if( pCDocLineNext ){
/* 次の行のデータを最後に追加 */
// 改行を削除するような置換
int nNewLen = nWorkPos + pCDocLineNext->GetLengthWithEOL() + nInsLen;
if( nWorkLen <= nWorkPos && nLineLen <= nNewLen + 10 ){
// 行を連結して1行にするような操作の高速化
// 削除が元データの有効長以下で行の長さが伸びるか少し減る場合reallocを試みる
static CDocLine* pDocLinePrevAccess = NULL;
static int nAccessCount = 0;
int nBufferReserve = nNewLen;
if( pDocLinePrevAccess == pCDocLine ){
if( 100 < nAccessCount ){
if( 1000 < nNewLen ){
int n = 1000;
while( n < nNewLen ){
n += n / 5; // 20%づつ伸ばす
}
nBufferReserve = n;
}
}else{
nAccessCount++;
}
}else{
pDocLinePrevAccess = pCDocLine;
nAccessCount = 0;
}
CNativeW& ref = pCDocLine->_GetDocLineData();
ref.AllocStringBuffer(nBufferReserve);
ref._SetStringLength(nWorkPos);
ref.AppendString(pInsData, nInsLen);
ref.AppendNativeData(pCDocLineNext->_GetDocLineDataWithEOL());
pCDocLine->SetEol();
}else{
CNativeW tmp;
tmp.AllocStringBuffer(nNewLen);
tmp.AppendString(pLine, nWorkPos);
tmp.AppendString(pInsData, nInsLen);
tmp.AppendNativeData(pCDocLineNext->_GetDocLineDataWithEOL());
pCDocLine->SetDocLineStringMove(&tmp);
}
if( bChangeOneLine ){
pArg->nInsSeq = CModifyVisitor().GetLineModifiedSeq(pCDocLine);
CModifyVisitor().SetLineModified(pCDocLine, nSetSeq);
if( !bInsOneLine ){
pArg->ptNewPos.x = pArg->ptNewPos.x + nInsLen;
bInsOneLine = true;
}
}else{
CModifyVisitor().SetLineModified(pCDocLine, pArg->nDelSeq);
// 削除される行のマーク類を保存
markNext = pCDocLineNext->m_sMark;
bSetMark = true;
}
/* 次の行 行オブジェクトの削除 */
m_pcDocLineMgr->DeleteLine( pCDocLineNext );
pCDocLineNext = NULL;
/* 削除した行の総数 */
++(pArg->nDeletedLineNum);
}else{
/* 行内データ削除 */
CNativeW tmp;