// Rozwizanie 1
// Cakowite zuycie stosu: 1116 bajtw (liczc wszystkie
// zmienne lokalne: nazwaPliku, parser, err, dysk, sciezka,
// sciezkaZDyskiem, nazwa, rozszerzenie, nazwaZRozsz)
{
    TFileName nazwaPliku;
    
    // Komponowanie cieki do pliku
    // ...
    // Niech nazwaPliku = "c:\\Data\\Images\\zdjecie1.jpg"
    
    // Rozkadamy ciek.
    TParse parser;
    TInt err = parser.Set( nazwaPliku, NULL, NULL );
    
    if( err == KErrNone )
    {
        // Ponisze deskryptory wskanikowe bd wskazywa
        // na poprawne dane tak dugo, dopki bdzie istnia
        // obiekt "parser" (przechowuje kopi cieki).
        TPtrC dysk = parser.Drive();    // "c:"
        TPtrC sciezka = parser.Path();    // "\\Data\\Images\\"
        TPtrC sciezkaZDyskiem = parser.DriveAndPath();    // "c:\\Data\\Images\\"
        TPtrC nazwa = parser.Name();    // "zdjecie1"
        TPtrC rozszerzenie = parser.Ext();    // ".jpg"
        TPtrC nazwaZRozsz = parser.NameAndExt();    // "zdjecie1.jpg"
    }
}

// Rozwizanie 2 (zoptymalizowane)
// Cakowite zuycie stosu: 84 bajty
{
    HBufC* nazwaPliku = HBufC::NewL( KMaxFileName );
    
    // Komponowanie cieki do pliku
    // ...
    // Niech nazwaPliku = "c:\\Data\\Images\\zdjecie1.jpg"
    
    // Wskanik "nazwaPliku" odnosi si do obszaru o rozmiarze
    // 512 bajtw. Wiemy, e rzeczywista ilo danych przechowywanych
    // w tym obszarze wynosi 27 znakw - reszt pamici moemy zwolni:
    nazwaPliku = nazwaPliku->ReAlloc( nazwaPliku->Length() );
    if( nazwaPliku == NULL )
    {
        // Realokacja si nie powioda - oryginalny deskryptor
        // pozosta nienaruszony, moemy wykona dalsz cz
        // programu...
    }
    
    // Rozkadamy ciek.
    TParsePtrC parserOpt( *nazwaPliku );
    
    // Odczytujemy dane (analogicznie jak w przypadku
    // obiektu "parser" klasy TParse).
    
    // Ponisze deskryptory wskanikowe bd wskazywa
    // na poprawne dane tak dugo, dopki nie zostanie
    // zwolniony wskanik "nazwaPliku".
    TPtrC dysk = parserOpt.Drive();    // "c:"
    TPtrC sciezka = parserOpt.Path();    // "\\Data\\Images\\"
    // ...
    
    delete nazwaPliku;
}
