zoukankan      html  css  js  c++  java
  • Import and Export vCard item(转)


    CS000900Creation dateApril 17, 2008
    PlatformS60 3rd Edition, FP1Tested on devicesNokia N93
    CategorySymbian C++SubcategoryPIM

    Keywords (APIs, classes, methods, functions): RFileReadStream, CContactDatabase, CContactItem, CContactDatabase::OpenL(), CContactDatabase::ImportContactsL()

    Overview

    This snippet shows a simple function implementation to import one or more vCards from a given file to the default contacts database.

    This snippet can be self-signed.

    MMP file

    The following capabilities and libraries are required:

    CAPABILITY WriteUserData
    LIBRARY  euser.lib
    LIBRARY estor.lib
    LIBRARY efsrv.lib
    LIBRARY cntmodel.lib

    Source file

    #include <e32cmn.h>   //TUid
    #include <e32std.h> //User
    #include <e32base.h> //CArrayPtr, CleanupStack
    #include <e32def.h> //TBool
    #include <s32file.h> //RFileReadStream
    #include <f32file.h> //RFs
    #include <cntdb.h> //CContactDatabase
    #include <cntitem.h> //CContactItem
    TBool ImportVCardL(const TDesC& aFileName)
    {
    RFs fileSession;
    RFile file;
    TBool result = EFalse;
     
    User::LeaveIfError(fileSession.Connect());
    CleanupClosePushL(fileSession);
     
    if (file.Open(fileSession, aFileName, EFileRead) != KErrNone)
    {
    //failed to open the file
    CleanupStack::PopAndDestroy(); //fileSession
    return EFalse;
    }
    CleanupClosePushL(file);
     
    //open a read stream to the file
    RFileReadStream inputFileStream(file);
    CleanupClosePushL(inputFileStream);
     
    //open the default contacts database
    CContactDatabase* contactsDb = CContactDatabase::OpenL();
    CleanupStack::PushL(contactsDb);
     
    //KVersitEntityUidVCard is used to identify a vCard
    TUid uid = TUid::Uid(KVersitEntityUidVCard);
     
    //import one or more vCards from the read stream
    CArrayPtr<CContactItem>* imported = contactsDb->ImportContactsL(uid,
    inputFileStream,
    result,
    CContactDatabase::ETTFormat);
     
    //caller has ownership of the array and frees allocated memory
    imported->ResetAndDestroy();
    delete imported;
     
    CleanupStack::PopAndDestroy(4); //contactsDb,inputFileStream,
    //file,fileSession
     
    return result;
    }

    Postconditions

    One or more vCards from the given file are imported to the default contacts database. ETrue is returned to the caller or in case of an error, EFalse is returned.

    IDCS000901Creation dateApril 17, 2008
    PlatformS60 3rd Edition, FP1Tested on devicesNokia N93
    CategorySymbian C++SubcategoryPIM

    Keywords (APIs, classes, methods, functions): RFileWriteStream, CContactDatabase, CContactIdArray, CCntFilter, CContactDatabase::OpenL(), CContactDatabase::ExportSelectedContactsL(), CContactDatabase::FilterDatabaseL(), CCntFilter::SetContactFilterTypeALL(), CCntFilter::SetContactFilterTypeCard()

    Overview

    This snippet shows a simple function implementation to export one contact from the default contacts database as a vCard to a given file.

    This snippet can be self-signed.

    MMP file

    The following capabilities and libraries are required:

    CAPABILITY ReadUserData
    LIBRARY  euser.lib
    LIBRARY estor.lib
    LIBRARY efsrv.lib
    LIBRARY cntmodel.lib

    Source file

    #include <e32cmn.h>   //TUid
    #include <e32std.h> //User
    #include <e32base.h> //CArrayPtr, CleanupStack
    #include <e32def.h> //TBool
    #include <s32file.h> //RFileReadStream
    #include <f32file.h> //RFs
    #include <cntdb.h> //CContactDatabase
    #include <cntdef.h> //CContactIdArray
    #include <cntfilt.h> //CCntFilter
    TBool ExportVCardL(const TDesC& aFileName, TInt aItemIndex)
    {
    RFs fileSession;
    RFile file;
     
    User::LeaveIfError(fileSession.Connect());
    CleanupClosePushL(fileSession);
     
    if (file.Replace(fileSession, aFileName, EFileWrite) != KErrNone)
    {
    //failed to create the file
    CleanupStack::PopAndDestroy(); //fileSession
    return EFalse;
    }
    CleanupClosePushL(file);
     
    //open a write stream to the file
    RFileWriteStream outputFileStream(file);
    CleanupClosePushL(outputFileStream);
     
    //open the default contacts database
    CContactDatabase* contactsDb = CContactDatabase::OpenL();
    CleanupStack::PushL(contactsDb);
     
    //create an array of contact IDs to export
    CContactIdArray* exportContacts = CContactIdArray::NewL();
    CleanupStack::PushL(exportContacts);
     
    //use a filter to get only contact items (e.g. templates are excluded)
    CCntFilter *filter = CCntFilter::NewLC();
    filter->SetContactFilterTypeALL(EFalse);
    filter->SetContactFilterTypeCard(ETrue);
    contactsDb->FilterDatabaseL(*filter);
     
    //create an array to hold all filtered contact items
    CContactIdArray* contactIds;
    contactIds = CContactIdArray::NewLC(filter->iIds);
     
    //add given contact(by index) to the array of contact IDs to export
    if((*contactIds).Count() >= aItemIndex)
    exportContacts->AddL((*contactIds)[aItemIndex] );
     
    CleanupStack::PopAndDestroy(2); //contactIds, filter
     
    //KVersitEntityUidVCard is used to identify a vCard
    TUid uid = TUid::Uid(KVersitEntityUidVCard);
    contactsDb->ExportSelectedContactsL(uid,
    *exportContacts,
    outputFileStream,
    //contact ID is no exported
    CContactDatabase::EExcludeUid);
     
    CleanupStack::PopAndDestroy(5); //exportContacts,contactsDb,
    //outputFileStream,file,fileSession
     
    return ETrue;
    }

    Postconditions

    A contact given by the index from the default contacts database is exported as a vCard to the given file.

    The function returns ETrue to the caller when the file creation succeeds or EFalse when the file creation fails.

  • 相关阅读:
    ubuntu实时显示网速cpu占用和内存占用率
    删除以....开头的所有文件
    0.0.....1 至 0.99.......9 之间正则
    引入腾讯视频播放,可控制是否暂停播放
    解决微信小程序textarea层级太高遮挡其他组件的问题
    查看某分支推送记录
    小程序下载canvas生成图片
    微信小程序企业付款到个人
    秒 转化为 时:分:秒 ------- 类似倒计时
    iOS--崩溃日志的格式化分析---格式化crash日志
  • 原文地址:https://www.cnblogs.com/yaoliang11/p/1858498.html
Copyright © 2011-2022 走看看