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.

  • 相关阅读:
    让WPF和SL控件同时支持绑定和赋值
    VS2010下如何调试Framework源代码(即FCL)
    使用Entity Framework和WCF Ria Services开发SilverLight之2:POCO
    WPF快速指导15:动画
    改善C#程序的建议5:引用类型赋值为null与加速垃圾回收
    使用Entity Framework和WCF Ria Services开发SilverLight之1:简单模型
    MVVM中的命令绑定及命令参数
    改善C#程序的建议7:正确停止线程
    Prism安装、MVVM基础概念及一个简单的样例
    改善C#程序的建议8:避免锁定不恰当的同步对象
  • 原文地址:https://www.cnblogs.com/yaoliang11/p/1858498.html
Copyright © 2011-2022 走看看