Symbian
Symbian OS Library

FAQ-0800 How can I detect the default document folder on a device?

[Index][spacer] [Previous] [Next]



 

Classification: C++ Category: EIKON
Created: 06/11/2002 Modified: 07/23/2003
Number: FAQ-0800
Platform: ER5, Symbian OS v6.0

Question:
I'd like to find out the default document folder on the device, how can I do this?

Answer:
This is generally possible - but not via any set of supported or documented APIs. This means it cannot be guaranteed to work and may change between different devices and/or different Symbian OS releases. However, the following code has been used successfully:

    Nokia 9200 Communicator Series
    // Constant for obtaining default document folder
    const TUid KUidGlobalDefaultDocumentDirectory = {0x10005127};
    //
    #include // for CDictionaryFileStore
    ...

    {
    TFileName defaultFolder;
    CDictionaryStore* store=CDictionaryFileStore::SystemLC(iEikonEnv->FsSession());
    if (store->IsPresentL(KUidGlobalDefaultDocumentDirectory))
    {
    RDictionaryReadStream stream;
    stream.OpenLC(*store,KUidGlobalDefaultDocumentDirectory);
    stream >> defaultFolder;
    CleanupStack::PopAndDestroy(); //stream
    }
      else
        defaultFolder.Zero();CleanupStack::PopAndDestroy(); //store
        }
        Symbian OS v5 (and earlier)
        _LIT(KShellIniFile,"c:\\System\\Apps\\Shell\\Shell.ini");
        const TUid KUidShellApp = {0x10000076};

        const TUid KUidShellPreferences = {0x10000296}; // Old, not used in ER5
        const TUid KUidShlPreferencesER5 = {0x10003EE0}; // New, for ER5

        ...
        {
        CDictionaryStore* shellIni=CDictionaryFileStore::OpenLC(iEikonEnv->FsSession(),KShellIniFile,KUidShellApp);
        RDictionaryReadStream stream;
        stream.OpenLC(*shellIni,KUidShellPreferences);
        TInt32 statusFlags;
        TFileName aDefaultDir;
        TRAPD(err,stream >> statusFlags);
        if (err==KErrEof)
        {
        // KUidShellPreferences not found
        CleanupStack::PopAndDestroy(); //stream
        stream.OpenLC(*shellIni, KUidShlPreferencesER5);
        TRAP(err,stream >> statusFlags);
        if (err==KErrEof)
        // KUidShellPreferencesER5 not found either
        User::Leave(KErrNotSupported);
        else
        User::Leave(err);
        }
        else
        User::Leave(err);
        stream >> aDefaultDir;
        CleanupStack::PopAndDestroy(); // stream
        CleanupStack::PopAndDestroy(); // shellIni
        }