williamr@4: // Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). williamr@4: // All rights reserved. williamr@4: // This component and the accompanying materials are made available williamr@4: // under the terms of the License "Eclipse Public License v1.0" williamr@4: // which accompanies this distribution, and is available williamr@4: // at the URL "http://www.eclipse.org/legal/epl-v10.html". williamr@4: // williamr@4: // Initial Contributors: williamr@4: // Nokia Corporation - initial contribution. williamr@4: // williamr@4: // Contributors: williamr@4: // williamr@4: // Description: williamr@4: // williamr@4: williamr@4: /** williamr@4: @file williamr@4: @publishedAll williamr@4: @prototype williamr@4: */ williamr@4: williamr@4: #if !defined(__F32FILE64_H__) williamr@4: #define __F32FILE64_H__ williamr@4: williamr@4: williamr@4: /** williamr@4: @publishedAll williamr@4: @prototype williamr@4: williamr@4: Creates and opens a file, and performs all operations on a single open file. williamr@4: williamr@4: This is equivalent to RFile class. williamr@4: This class is meant for accessing files of size greater than or equal to 2GB also. williamr@4: williamr@4: These include: williamr@4: williamr@4: - reading from and writing to the file williamr@4: williamr@4: - seeking to a position within the file williamr@4: williamr@4: - locking and unlocking within the file williamr@4: williamr@4: - setting file attributes williamr@4: williamr@4: Before using any of these services, a connection to a file server session must williamr@4: have been made, and the file must be open. williamr@4: williamr@4: Opening Files: williamr@4: williamr@4: - use Open() to open an existing file for reading or writing; an error is williamr@4: returned if it does not already exist. williamr@4: To open an existing file for reading only, use Open() with an access mode of williamr@4: EFileRead, and a share mode of EFileShareReadersOnly. williamr@4: williamr@4: - use Create() to create and open a new file for writing; an error is returned williamr@4: if it already exists. williamr@4: williamr@4: - use Replace() to open a file for writing, replacing any existing file of williamr@4: the same name if one exists, or creating a new file if one does not exist. williamr@4: Note that if a file exists, its length is reset to zero. williamr@4: williamr@4: - use Temp() to create and open a temporary file with a unique name, williamr@4: for writing and reading. williamr@4: williamr@4: When opening a file, you must specify the file server session to use for williamr@4: operations with that file. If you do not close the file explicitly, it is williamr@4: closed when the server session associated with it is closed. williamr@4: williamr@4: Reading and Writing: williamr@4: williamr@4: There are several variants of both Read() and Write(). williamr@4: The basic Read(TDes8& aDes) and Write(const TDesC8& aDes) are supplemented williamr@4: by variants allowing the descriptor length to be overridden, or the seek williamr@4: position of the first byte to be specified, or asynchronous completion, williamr@4: or any combination. williamr@4: williamr@4: Reading transfers data from a file to a descriptor, and writing transfers williamr@4: data from a descriptor to a file. In all cases, the file data is treated williamr@4: as binary and byte descriptors are used (TDes8, TDesC8). williamr@4: williamr@4: @see RFile williamr@4: */ williamr@4: class RFile64 : public RFile williamr@4: { williamr@4: public: williamr@4: EFSRV_IMPORT_C TInt Open(RFs& aFs,const TDesC& aName,TUint aFileMode); williamr@4: EFSRV_IMPORT_C TInt Create(RFs& aFs,const TDesC& aName,TUint aFileMode); williamr@4: EFSRV_IMPORT_C TInt Replace(RFs& aFs,const TDesC& aName,TUint aFileMode); williamr@4: EFSRV_IMPORT_C TInt Temp(RFs& aFs,const TDesC& aPath,TFileName& aName,TUint aFileMode); williamr@4: williamr@4: EFSRV_IMPORT_C TInt AdoptFromClient(const RMessage2& aMsg, TInt aFsIndex, TInt aFileIndex); williamr@4: EFSRV_IMPORT_C TInt AdoptFromServer(TInt aFsHandle, TInt aFileHandle); williamr@4: EFSRV_IMPORT_C TInt AdoptFromCreator(TInt aFsIndex, TInt aFileHandleIndex); williamr@4: williamr@4: inline TInt Read(TDes8& aDes) const; williamr@4: inline void Read(TDes8& aDes,TRequestStatus& aStatus) const; williamr@4: inline TInt Read(TDes8& aDes,TInt aLength) const; williamr@4: inline void Read(TDes8& aDes,TInt aLength,TRequestStatus& aStatus) const; williamr@4: williamr@4: EFSRV_IMPORT_C TInt Read(TInt64 aPos, TDes8& aDes) const; williamr@4: EFSRV_IMPORT_C void Read(TInt64 aPos, TDes8& aDes, TRequestStatus& aStatus) const; williamr@4: EFSRV_IMPORT_C TInt Read(TInt64 aPos, TDes8& aDes, TInt aLength) const; williamr@4: EFSRV_IMPORT_C void Read(TInt64 aPos, TDes8& aDes, TInt aLength,TRequestStatus& aStatus) const; williamr@4: williamr@4: inline TInt Write(const TDesC8& aDes); williamr@4: inline void Write(const TDesC8& aDes,TRequestStatus& aStatus); williamr@4: inline TInt Write(const TDesC8& aDes,TInt aLength); williamr@4: inline void Write(const TDesC8& aDes,TInt aLength,TRequestStatus& aStatus); williamr@4: williamr@4: EFSRV_IMPORT_C TInt Write(TInt64 aPos, const TDesC8& aDes); williamr@4: EFSRV_IMPORT_C void Write(TInt64 aPos, const TDesC8& aDes,TRequestStatus& aStatus); williamr@4: EFSRV_IMPORT_C TInt Write(TInt64 aPos, const TDesC8& aDes,TInt aLength); williamr@4: EFSRV_IMPORT_C void Write(TInt64 aPos, const TDesC8& aDes,TInt aLength,TRequestStatus& aStatus); williamr@4: williamr@4: EFSRV_IMPORT_C TInt Seek(TSeek aMode, TInt64& aPos) const; williamr@4: EFSRV_IMPORT_C TInt Size(TInt64& aSize) const; williamr@4: EFSRV_IMPORT_C TInt SetSize(TInt64 aSize); williamr@4: EFSRV_IMPORT_C TInt Lock(TInt64 aPos, TInt64 aLength) const; williamr@4: EFSRV_IMPORT_C TInt UnLock(TInt64 aPos, TInt64 aLength) const; williamr@4: williamr@4: #if defined(_F32_STRICT_64_BIT_MIGRATION) williamr@4: // williamr@4: // If _F32_STRICT_64_BIT_MIGRATION is defined, hide TUint overloads of RFile64::Read williamr@4: // and RFile64::Write APIs to force compiler errors when TUint positions are used. williamr@4: // williamr@4: private: williamr@4: #endif williamr@4: williamr@4: EFSRV_IMPORT_C TInt Read(TUint aPos,TDes8& aDes) const; williamr@4: EFSRV_IMPORT_C void Read(TUint aPos,TDes8& aDes,TRequestStatus& aStatus) const; williamr@4: EFSRV_IMPORT_C TInt Read(TUint aPos,TDes8& aDes,TInt aLength) const; williamr@4: EFSRV_IMPORT_C void Read(TUint aPos,TDes8& aDes,TInt aLength,TRequestStatus& aStatus) const; williamr@4: williamr@4: EFSRV_IMPORT_C TInt Write(TUint aPos,const TDesC8& aDes); williamr@4: EFSRV_IMPORT_C void Write(TUint aPos,const TDesC8& aDes,TRequestStatus& aStatus); williamr@4: EFSRV_IMPORT_C TInt Write(TUint aPos,const TDesC8& aDes,TInt aLength); williamr@4: EFSRV_IMPORT_C void Write(TUint aPos,const TDesC8& aDes,TInt aLength,TRequestStatus& aStatus); williamr@4: williamr@4: #if defined(_F32_STRICT_64_BIT_MIGRATION) williamr@4: // williamr@4: // If _F32_STRICT_64_BIT_MIGRATION is defined, create private overloads of legacy 32-bit williamr@4: // RFile Read/Write API's to force compiler errors when TInt positions are used. williamr@4: // williamr@4: private: williamr@4: #endif williamr@4: williamr@4: inline TInt Read(TInt aPos,TDes8& aDes) const; williamr@4: inline void Read(TInt aPos,TDes8& aDes,TRequestStatus& aStatus) const; williamr@4: inline TInt Read(TInt aPos,TDes8& aDes,TInt aLength) const; williamr@4: inline void Read(TInt aPos,TDes8& aDes,TInt aLength,TRequestStatus& aStatus) const; williamr@4: williamr@4: inline TInt Write(TInt aPos,const TDesC8& aDes); williamr@4: inline void Write(TInt aPos,const TDesC8& aDes,TRequestStatus& aStatus); williamr@4: inline TInt Write(TInt aPos,const TDesC8& aDes,TInt aLength); williamr@4: inline void Write(TInt aPos,const TDesC8& aDes,TInt aLength,TRequestStatus& aStatus); williamr@4: williamr@4: private: williamr@4: TInt Seek(TSeek aMode, TInt& aPos) const; // This API is not supported for RFile64 williamr@4: TInt Size(TInt& aSize) const; // This API is not supported for RFile64 williamr@4: friend class RFilePlugin; williamr@4: }; williamr@4: williamr@4: #ifndef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API williamr@4: #include williamr@4: #endif williamr@4: williamr@4: #endif