RFileBuf Class Reference

class RFileBuf : public TStreamBuf

A stream buffer hosted by a file.

Instances of this class are used by file based persistent stores, i.e. CFileStore type objects. An RFileBuf object is associated with a file and the file is said to be attached to the stream buffer.

An RFileBuf object is also used by RFileReadStream and RFileWriteStream objects to provide buffered file I/O.

The stream buffer has intermediate buffering capabilities.

When used as the basis for a file store, it hosts multiple streams through the TStreamExchange and RShareBuf classes.

Open() , Close() , Attach() , Detach() , File() and Reattach() usage patterns:

Pattern 1: RFileBuf owns the file step 1a: Open() /Create()/Temp() is used to connect the buffer to a file step 1b: Use the file buffer step 1c: Close() releases this resource.

Pattern 2: RFile is opened elsewhere and ownership is handed over to RFileBuf This may happen if the file is already opened by another API, or from another process for example step 2a: Attach() is used to hand ownership of the opened file to the buffer. After Attach() the supplied file handle is NULLed. step 2b: Use the file buffer step 2c: Close() releases the file resource.

Pattern 3: RFileBuf is used transiently to manage an existing opened file: step 3a: Attach() is used to bind the buffer to the already open file. After Attach() the supplied file handle is NULLed. step 3b: Use the file buffer step 3c: RFileBuf::File() is used to retrieve the file handle again, then Detach() is called to disconnect the buffer from the file. At this point, the destruction of the file buffer will have no effect on the file. The retrieved file handle in step 3c must be used to close the file.

Pattern 4: Transient direct file access to a buffered file step 4a: RFileBuf::File() is used to retrieve the file handle. [Optional: Detach() is used to disconnect the file buffer] step 4b: Use the file directly. Note that writing to the file may cause coherency problems with the RFileBuf buffer - in which case you need to Reset() the buffer as well. step 4c: [Optional: Reattach() is used to hand the file back to the buffer]. Use of the buffer is resumed

CFileStore RFileReadStream RFileWriteStream

Inherits from

Public Member Functions
RFileBuf ()
RFileBuf ( TInt )
IMPORT_C void Close ()
void Detach ()
RFile & File ()
IMPORT_C TInt Open ( RFs &, const TDesC &, TUint )
void Reattach ( RFile &)
IMPORT_C TInt Replace ( RFs &, const TDesC &, TUint )
IMPORT_C void Reset ()
void Reset ( TInt )
IMPORT_C void SetSizeL ( TInt )
IMPORT_C TInt Temp ( RFs &, const TDesC &, TFileName &, TUint )
Protected Member Functions
IMPORT_C TInt DoReadL ( TAny *, TInt )
IMPORT_C TStreamPos DoSeekL ( TMark , TStreamLocation , TInt )
IMPORT_C void DoSynchL ()
IMPORT_C void DoWriteL (const TAny *, TInt )
IMPORT_C TInt DoWriteL (const TDesC8 &, TInt , TRequestStatus &)
IMPORT_C void OverflowL ()
void SetBuf ( TRead , TUint8 *, TUint8 *)
void SetBuf ( TWrite , TUint8 *, TUint8 *)
void SetBuf ( TArea , TUint8 *, TUint8 *)
IMPORT_C TInt UnderflowL ( TInt )
Private Member Functions
TUint8 * AllocL ()
TInt EndL ()
void FileWriteL (const TAny *, TInt , TInt )
void FileWriteL (const TAny *, TInt )
void Free ()
TInt Lag ( TRead )
TInt Mark ( TMark )
TInt Mark ( TRead )
TInt Mark ( TWrite )
TInt MovePos ( TRead , TInt )
TInt MovePos ( TWrite , TInt )
TInt Pos ( TRead )
TInt Pos ( TWrite )
TInt Reach ( TWrite )
void SetLimit ( TWrite , TUint8 *)
void SetPos ( TMark , TInt )
void SetPos ( TRead , TInt )
void SetPos ( TWrite , TInt )
TInt Span ( TWrite )
Inherited Functions
MStreamBuf::MStreamBuf()
MStreamBuf::PushL()
MStreamBuf::Read(TDes8 &,TInt,TRequestStatus &)
MStreamBuf::Read(TDes8 &,TRequestStatus &)
MStreamBuf::ReadL(MStreamInput &)
MStreamBuf::ReadL(MStreamInput &,TInt)
MStreamBuf::ReadL(MStreamInput &,TStreamTransfer)
MStreamBuf::ReadL(TAny *,TInt)
MStreamBuf::ReadL(TDes8 &,TInt,TRequestStatus &)
MStreamBuf::ReadL(TDes8 &,TRequestStatus &)
MStreamBuf::Release()
MStreamBuf::SeekL(TMark,TStreamLocation,TInt)
MStreamBuf::SeekL(TMark,TStreamPos)
MStreamBuf::SeekL(TRead,TInt)
MStreamBuf::SeekL(TRead,TStreamLocation,TInt)
MStreamBuf::SeekL(TWrite,TInt)
MStreamBuf::SeekL(TWrite,TStreamLocation,TInt)
MStreamBuf::SizeL()const
MStreamBuf::Synch()
MStreamBuf::SynchL()
MStreamBuf::TellL(TRead)const
MStreamBuf::TellL(TWrite)const
MStreamBuf::Write(const TDesC8 &,TInt,TRequestStatus &)
MStreamBuf::Write(const TDesC8 &,TRequestStatus &)
MStreamBuf::WriteL(MStreamOutput &)
MStreamBuf::WriteL(MStreamOutput &,TInt)
MStreamBuf::WriteL(MStreamOutput &,TStreamTransfer)
MStreamBuf::WriteL(const TAny *,TInt)
MStreamBuf::WriteL(const TDesC8 &,TInt,TRequestStatus &)
MStreamBuf::WriteL(const TDesC8 &,TRequestStatus &)
TStreamBuf::Avail(TArea)const
TStreamBuf::Avail(TRead)const
TStreamBuf::Avail(TWrite)const
TStreamBuf::DoReadL(MStreamInput &,TStreamTransfer)
TStreamBuf::DoWriteL(MStreamOutput &,TStreamTransfer)
TStreamBuf::End(TArea)const
TStreamBuf::End(TRead)const
TStreamBuf::End(TWrite)const
TStreamBuf::Ptr(TArea)const
TStreamBuf::Ptr(TRead)const
TStreamBuf::Ptr(TWrite)const
TStreamBuf::SetEnd(TArea,TUint8 *)
TStreamBuf::SetEnd(TRead,TUint8 *)
TStreamBuf::SetEnd(TWrite,TUint8 *)
TStreamBuf::SetPtr(TArea,TUint8 *)
TStreamBuf::SetPtr(TRead,TUint8 *)
TStreamBuf::SetPtr(TWrite,TUint8 *)
TStreamBuf::TStreamBuf()
Inherited Enumerations
MStreamBuf:TRead
MStreamBuf:TWrite
Private Attributes
TUint8 * iBase
TInt iExt
__MUTABLE RFile iFile
TInt iRPos
TInt iSize
TUint8 * iWLim
TInt iWPos

Constructor & Destructor Documentation

RFileBuf()

IMPORT_C RFileBuf ( )

Constructs the object with a default intermediate buffer size.

The size of the intermediate buffer is the value of the constant KDefaultFileBufSize.

RFileBuf(TInt)

IMPORT_C RFileBuf ( TInt aSize )

Parameters

TInt aSize

Member Functions Documentation

AllocL()

TUint8 * AllocL ( ) [private]

Close()

IMPORT_C void Close ( )

Writes any outstanding data from the intermediate buffer before freeing the intermediate buffer and closing the attached file.

Detach()

void Detach ( ) [inline]

Detaches the file from this stream buffer.

The intermediate buffer's read and write marks are not changed, and the stream positions are not changed. This means that the contents of the file should not change while it is detached.

Attach() Reattach()

DoReadL(TAny *, TInt)

IMPORT_C TInt DoReadL ( TAny * aPtr,
TInt aMaxLength
) [protected, virtual]

Reads data from the intermediate buffer into the specified memory location.

The function calls the virtual function UnderfLowL() to give concrete implementations the chance to refill the intermediate buffer, and satisfy the caller's requirements.

This implementation overrides the one supplied by the base class MStreamBuf , and is called by, MStreamBuf::ReadL(TAny*,TInt) .

MStreamBuf::ReadL() MStreamBuf::DoReadL()

Parameters

TAny * aPtr A pointer to the target memory location for the data read from the intermediate buffer.
TInt aMaxLength The maximum number of bytes to be read.

DoSeekL(TMark, TStreamLocation, TInt)

IMPORT_C TStreamPos DoSeekL ( TMark aMark,
TStreamLocation aLocation,
TInt anOffset
) [protected, virtual]

Parameters

TMark aMark
TStreamLocation aLocation
TInt anOffset

DoSynchL()

IMPORT_C void DoSynchL ( ) [protected, virtual]

Synchronises the stream buffer with the stream, leaving if any error occurs.

In effect, this ensures that buffered data is delivered to the stream.

It is called by SynchL() .

This implementation is empty, but classes derived from MStreamBuf can provide their own implementation, if necessary.

MStreamBuf::SynchL()

DoWriteL(const TAny *, TInt)

IMPORT_C void DoWriteL ( const TAny * aPtr,
TInt aLength
) [protected, virtual]

Writes data from the specified memory location into the intermediate buffer.

The function calls the virtual function OverfLowL() to give concrete implementations the chance to forward the intermediate buffer content to its destination.

This implementation overrides the one supplied by the base class MStreamBuf , and is called by MStreamBuf::WriteL(const TAny*,TInt) .

MStreamBuf::WriteL() MStreamBuf::DoWriteL()

Parameters

const TAny * aPtr A pointer to the source memory location for the data to be written to the intermediate buffer.
TInt aLength The number of bytes to be written.

DoWriteL(const TDesC8 &, TInt, TRequestStatus &)

IMPORT_C TInt DoWriteL ( const TDesC8 & aDes,
TInt aMaxLength,
TRequestStatus & aStatus
) [protected, virtual]

Writes data from the specified descriptor into this stream buffer.

This function is called by WriteL(const TDesC8&,TInt,TRequestStatus&) .

This implementation deals with the request synchronously, and completes the request with KErrNone. Other implementations may choose to deal with this in a true asynchronous manner.

In addition, the write operation itself uses the DoWriteL(TAny*,TInt) variant.

MStreamBuf::WriteL()

Parameters

const TDesC8 & aDes The source descriptor for the data to be written into the stream buffer.
TInt aMaxLength The number of bytes to be written. This value must not be greater than the maximum length of the descriptor, otherwise the function raises a STORE-Stream 6 panic.
TRequestStatus & aStatus The request status that indicates the completion status of this asynchronous request.

EndL()

TInt EndL ( ) [private]

File()

RFile & File ( ) const [inline]

FileWriteL(const TAny *, TInt, TInt)

void FileWriteL ( const TAny * aPtr,
TInt aLength,
TInt aSeek
) [private]

Parameters

const TAny * aPtr
TInt aLength
TInt aSeek

FileWriteL(const TAny *, TInt)

void FileWriteL ( const TAny * aPtr,
TInt aLength
) [private]

Parameters

const TAny * aPtr
TInt aLength

Free()

void Free ( ) [private]

Lag(TRead)

TInt Lag ( TRead ) const [private, inline]

Returns the number of bytes that are/were in the read area of the intermediate buffer yet to be passed to the user.

MStreamBuf::TRead

Parameters

TRead

Mark(TMark)

TInt Mark ( TMark aMark ) const [private]

Parameters

TMark aMark

Mark(TRead)

TInt Mark ( TRead ) const [private, inline]

Parameters

TRead

Mark(TWrite)

TInt Mark ( TWrite ) const [private, inline]

Parameters

TWrite

MovePos(TRead, TInt)

TInt MovePos ( TRead ,
TInt anOffset
) [private, inline]

Parameters

TRead
TInt anOffset

MovePos(TWrite, TInt)

TInt MovePos ( TWrite ,
TInt anOffset
) [private, inline]

Parameters

TWrite
TInt anOffset

Open(RFs &, const TDesC &, TUint)

IMPORT_C TInt Open ( RFs & aFs,
const TDesC & aName,
TUint aFileMode
)

Opens the specified file and attaches it to this stream buffer.

If the file cannot be opened, then it is not attached to this stream buffer.

Attach() TFileMode RFile

Parameters

RFs & aFs Handle to a file server session through which the file is opened.
const TDesC & aName The name of the file to be opened.
TUint aFileMode The mode in which the file is to be accessed. The mode is defined by the TFileMode type.

OverflowL()

IMPORT_C void OverflowL ( ) [protected, virtual]

Empties the intermediate buffer and resets the start and end points of the write area.

The implementation of this function depends on the way the stream itself is implemented. For example, the in-memory streams have simple implementations.

Pos(TRead)

TInt Pos ( TRead ) const [private, inline]

Parameters

TRead

Pos(TWrite)

TInt Pos ( TWrite ) const [private, inline]

Parameters

TWrite

Reach(TWrite)

TInt Reach ( TWrite ) const [private, inline]

Parameters

TWrite

Reattach(RFile &)

void Reattach ( RFile & aFile ) [inline]

Re-attaches the specified file to this stream buffer.

The intermediate buffer's read and write marks are not changed, and the stream positions are not changed.

The file should be the one that was detached using the Detach() function.

Attach() Detach()

Parameters

RFile & aFile The file to be re-attached.

Replace(RFs &, const TDesC &, TUint)

IMPORT_C TInt Replace ( RFs & aFs,
const TDesC & aName,
TUint aFileMode
)

Replaces the file with the specified name and attaches it to this stream buffer.

If there is an existing file with the same name, then this function overwrites it. If the file does not already exist, it is created.

If the file cannot be replaced, then it is not attached to this stream buffer.

Attach() TFileMode RFile

Parameters

RFs & aFs Handle to a file server session through which the file is replaced.
const TDesC & aName The name of the file to be replaced.
TUint aFileMode The mode in which the file is to be accessed. The mode is defined by the TFileMode type.

Reset()

IMPORT_C void Reset ( )

Frees the intermediate buffer.

If there is any read data in the intermediate buffer, then the function reverts the read position within the stream.

The intermediate buffer must not contain any outstanding write data, otherwise the function raises a STORE-File 6 panic.

Reset(TInt)

void Reset ( TInt aSize ) [inline]

Parameters

TInt aSize

SetBuf(TRead, TUint8 *, TUint8 *)

void SetBuf ( TRead ,
TUint8 * aPtr,
TUint8 * anEnd
) [protected, inline]

Sets the start and end points of the read area within the intermediate buffer.

MStreamBuf::TRead TStreamBuf::SetBuf

Parameters

TRead
TUint8 * aPtr The start point.
TUint8 * anEnd The end point.

SetBuf(TWrite, TUint8 *, TUint8 *)

void SetBuf ( TWrite ,
TUint8 * aPtr,
TUint8 * anEnd
) [protected, inline]

Sets the start and end points of the write area within the intermediate buffer.

A start point is always within an area; an end point is always the first byte beyond the end of an area.

MStreamBuf::TWrite

Parameters

TWrite
TUint8 * aPtr The start point.
TUint8 * anEnd The end point.

SetBuf(TArea, TUint8 *, TUint8 *)

void SetBuf ( TArea anArea,
TUint8 * aPtr,
TUint8 * anEnd
) [protected, inline]

Sets the start and end points of the read and/or the write area within the intermediate buffer.

A start point is always within an area; an end point is always the first byte beyond the end of an area.

MStreamBuf::TRead MStreamBuf::TWrite

Parameters

TArea anArea The areas within the intermediate buffer for which the start and end points are to be set. These can be the read area and/or the write area, as indicated by the ERead and EWrite bits. Only these bits can be set, otherwise the function raises a STORE-Stream 17 panic.
TUint8 * aPtr The start point.
TUint8 * anEnd The end point.

SetLimit(TWrite, TUint8 *)

void SetLimit ( TWrite ,
TUint8 * aLimit
) [private, inline]

Sets the start position of the write area within the intermediate buffer taking into account seeks.

Parameters

TWrite
TUint8 * aLimit

SetPos(TMark, TInt)

void SetPos ( TMark aMark,
TInt aPos
) [private]

Parameters

TMark aMark
TInt aPos

SetPos(TRead, TInt)

void SetPos ( TRead ,
TInt aPos
) [private, inline]

Parameters

TRead
TInt aPos

SetPos(TWrite, TInt)

void SetPos ( TWrite ,
TInt aPos
) [private, inline]

Parameters

TWrite
TInt aPos

SetSizeL(TInt)

IMPORT_C void SetSizeL ( TInt aSize )

Changes the size of the file attached to this buffer to the specified value.

Writes any outstanding data from the intermediate buffer to the stream hosted by the file. Any data in the intermediate buffer that would lie beyond the end of the truncated file, is not written.

Parameters

TInt aSize The new size of the file.

Span(TWrite)

TInt Span ( TWrite ) const [private, inline]

Returns the number of bytes of outstanding data in the intermediate buffer that is yet to be written, taking into account any changes brought about by seeks.

MStreamBuf::TWrite

Parameters

TWrite

Temp(RFs &, const TDesC &, TFileName &, TUint)

IMPORT_C TInt Temp ( RFs & aFs,
const TDesC & aPath,
TFileName & aName,
TUint aFileMode
)

Creates and opens a temporary file with a unique name and attaches it to this stream buffer.

Attach() TFileMode RFile

Parameters

RFs & aFs Handle to a file server session through which the file is created.
const TDesC & aPath The directory in which the file is created.
TFileName & aName On return, contains the full path and file name of the file. The filename is guaranteed to be unique within the specified directory.
TUint aFileMode The mode in which the file is to be accessed. The mode is defined by the TFileMode type.

UnderflowL(TInt)

IMPORT_C TInt UnderflowL ( TInt aMaxLength ) [protected, virtual]

Re-fills the intermediate buffer and resets the start and end points of the read area.

The implementation of this function depends on the way the stream itself is implemented. For example, the in-memory streams have simple implementations.

Parameters

TInt aMaxLength The maximum amount of data required for the intermediate buffer.

Member Data Documentation

TUint8 * iBase

TUint8 * iBase [private]

TInt iExt

TInt iExt [private]

__MUTABLE RFile iFile

__MUTABLE RFile iFile [private]

TInt iRPos

TInt iRPos [private]

TInt iSize

TInt iSize [private]

TUint8 * iWLim

TUint8 * iWLim [private]

TInt iWPos

TInt iWPos [private]