// Przykad ma jedynie charakter edukacyjny.
// Do kopiowania plikw naley uy dedykowanego API,
// np. CFileMan::Copy().

// Plik istniejcy w systemie
_LIT( KPlikStary, "c:\\sample1.wav" );
// Plik docelowy
_LIT( KPlikNowy, "c:\\data\\sample1.wav" );

// Otwieramy sesj do serwera plikw.
RFs fs;
User::LeaveIfError( fs.Connect() );
CleanupClosePushL( fs );

// Otwieramy istniejcy plik do odczytu.
RFile plikStary;
User::LeaveIfError( plikStary.Open( fs, KPlikStary, EFileRead ) );
CleanupClosePushL( plikStary );

// Odczytujemy jego rozmiar.
TInt rozmiar;
User::LeaveIfError( plikStary.Size( rozmiar ) );

// Tworzymy deskryptor do przechowywania danych
// binarnych (w tym celu uywa si zawsze deskryptorw
// 8-bitowych). Wskanik do deskryptora umieszczony
// zostanie na stosie CleanupStack.
HBufC8* dane = HBufC8::NewLC( rozmiar );

// Odczytujemy dane z pliku do deskryptora.
// Metoda RFile::Read() przyjmuje referencj do
// obiektu deskryptora modyfikowalnego. Deskryptor
// "dane" jest klasy HBufC8, jest wic deskryptorem
// niemodyfikowalnym. Musimy uy skojarzonego obiektu
// TPtr8 zwracanego przez metod HBufC8::Des().
TPtr8 daneWsk = dane->Des();
User::LeaveIfError( plikStary.Read( daneWsk ) );

// Tworzymy plik docelowy. Uywamy metody Replace()
// na wypadek, gdyby plik ju istnia. W takim przypadku
// zostanie zastpiony.
RFile plikNowy;
User::LeaveIfError( plikNowy.Replace( fs, KPlikNowy, EFileWrite ) );
CleanupClosePushL( plikNowy );

// Zapisujemy dane do pliku.
User::LeaveIfError( plikNowy.Write( daneWsk ) );

// Zwalniamy obiekty.
CleanupStack::PopAndDestroy( &plikNowy );
CleanupStack::PopAndDestroy( dane );
CleanupStack::PopAndDestroy( &plikStary );
CleanupStack::PopAndDestroy( &fs );
