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.

  • 相关阅读:
    SolidEdge如何绘制阵列之后取消掉某一些
    SolidEdge如何绘制变化半径倒圆角
    SolidEdge如何复制特征 建立类似于UG 块的概念
    SolidEdge如何打开或关闭自动标注尺寸
    SolidEdge 装配体中如何快速的搞定一个面上所有螺丝 如何在装配体上进行阵列
    SolidEdge 如何由装配图快速生成爆炸视图
    SolidEdge 如何由装配图快速进行标注和零件序号编写 制作BOM表
    [Angular 8] Take away: Web Components with Angular Elements: Beyond the Basics
    [Angular 8] Take away: Tools for Fast Angular Applications
    [Algorithm] Calculate Pow(x,n) using recursion
  • 原文地址:https://www.cnblogs.com/yaoliang11/p/1858498.html
Copyright © 2011-2022 走看看