• 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.

  • 相关阅读:
    Codeforces.1051G.Distinctification(线段树合并 并查集)
    BZOJ.4818.[SDOI2017]序列计数(DP 快速幂)
    BZOJ.2159.Crash的文明世界(斯特林数 树形DP)
    Codeforces.1110F.Nearest Leaf(线段树)
    Codeforces.1110E.Magic Stones(思路 差分)
    Yahoo Programming Contest 2019.D.Ears(DP)
    BZOJ.5251.[八省联考2018]劈配mentor(最大流)
    Codeforces Round #538 (Div. 2)
    BZOJ.5249.[九省联考2018]iiidx(贪心 线段树)
    Hello 2019 (D~G)
  • 原文地址:https://www.cnblogs.com/yaoliang11/p/1858498.html
Copyright © 2020-2023  润新知