Update contrib.
1 // Copyright (c) 1995-2009 Nokia Corporation and/or its subsidiary(-ies).
2 // All rights reserved.
3 // This component and the accompanying materials are made available
4 // under the terms of the License "Eclipse Public License v1.0"
5 // which accompanies this distribution, and is available
6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
8 // Initial Contributors:
9 // Nokia Corporation - initial contribution.
22 #if !defined(__F32FILE_H__)
25 #if !defined(__E32BASE_H__)
29 #ifndef SYMBIAN_ENABLE_PUBLIC_PLATFORM_HEADER_SPLIT
30 // Old implementation including platform e32svr.h (which includes the several other platform headers)...
31 #if !defined(__E32SVR_H__)
36 // New implementation including only the public headers needed for f32file.h...
38 // And the public headers previously included via e32svr.h but otherwise not needed for f32file.h...
50 The session default drive.
52 const TInt KDefaultDrive=KMaxTInt;
61 Indicates a drive letter which is not in use.
63 This is useful when scanning a drive list to find which drives are available.
65 const TInt KDriveAbsent=0x00;
74 The default value for the number of message slots passed to RFs::Connect().
78 const TInt KFileServerDefaultMessageSlots=-1;
87 The size of the array of TEntry items contained in a TEntryArray object.
92 const TInt KEntryArraySize=(0x200*sizeof(TText));
101 The character used to separate directories in the path name.
103 const TInt KPathDelimiter='\\';
112 The character used to separate the drive letter from the path.
114 const TInt KDriveDelimiter=':';
123 The character used to separate the filename from the extension.
125 const TInt KExtDelimiter='.';
134 The maximum number of available drives.
136 const TInt KMaxDrives=26;
143 The maximum number of available proxy drives.
145 const TInt KMaxProxyDrives=KMaxDrives-KMaxLocalDrives;
152 Defines a modifiable buffer descriptor to contain a drive list.
154 The descriptor has maximum length KMaxDrives, sufficient to contain
155 all possible drive letters.
160 typedef TBuf8<KMaxDrives> TDriveList;
168 The maximum length of a drivename.
170 Sufficient for a drive letter and colon.
172 const TInt KMaxDriveName=0x02;
181 Defines a modifiable buffer descriptor to contain a drive name.
183 A drive name comprises a drive letter (A through Z) and a colon.
184 KMaxDriveName (2 bytes) is sufficient for a drive letter and colon.
186 @see TDriveUnit::Name
189 typedef TBuf<KMaxDriveName> TDriveName;
198 The maximum length of a file system name or file system sub type name.
199 32 characters is sufficient for a file system or sub type name.
201 const TInt KMaxFSNameLength=0x0020;
210 Defines a modifiable buffer descriptor to contain a file system or file system sub type name.
212 @see KMaxFSNameLength
214 typedef TBuf<KMaxFSNameLength> TFSName;
223 File/directory attribute: any file without the hidden or system attribute.
225 const TUint KEntryAttNormal=0x0000;
234 File/directory attribute: read-only file or directory.
236 const TUint KEntryAttReadOnly=0x0001;
245 File/directory attribute: hidden file or directory.
247 const TUint KEntryAttHidden=0x0002;
256 File/directory attribute: system file.
258 const TUint KEntryAttSystem=0x0004;
267 File/directory attribute: volume name directory.
269 const TUint KEntryAttVolume=0x0008;
278 File/directory attribute: a directory without the hidden or system attribute.
280 const TUint KEntryAttDir=0x0010;
289 File/directory attribute: an archive file.
291 const TUint KEntryAttArchive=0x0020;
300 File/directory attribute: ROM eXecute In Place file
302 const TUint KEntryAttXIP=0x0080;
311 This file attribute bit is set if the file exists only on a remote file
312 system and is not locally cached.
314 Due to the potential high-latency of remote file systems, applications
315 (or users of applications) may make use of this bit to modify their
316 behaviour when working with remote files.
318 This is a read-only attribute, so any attempt to set this attribute will
321 const TUint KEntryAttRemote=0x0100;
330 The range of entry attributes reserved for file-system specific meanings.
331 File systems may assign meaning to these bits, but their definition will
332 not be supported nor maintained by Symbian.
334 All other file attribute bits are reserved for use by Symbian.
336 The following table summarises the assignment of attribute bits:
338 0 - KEntryAttReadOnly
357 16 - File System Specific
358 17 - File System Specific
359 18 - File System Specific
360 19 - File System Specific
362 20 - File System Specific
363 22 - File System Specific
364 22 - File System Specific
365 23 - File System Specific
370 27 - KEntryAttMatchExclude
372 28 - KEntryAttAllowUid
374 30 - KEntryAttMatchExclusive
377 const TUint KEntryAttMaskFileSystemSpecific=0x00FF0000;
386 Bit mask for matching file and directory entries.
388 This mask ensures that directories and hidden and
389 system files are matched.
391 (Note that KEntryAttNormal matches all entry types except directories, hidden
396 const TUint KEntryAttMatchMask=(KEntryAttHidden|KEntryAttSystem|KEntryAttDir);
406 Bit mask for matching file and directory entries.
408 This is used when all entry types, including hidden and system files,
409 but excluding the volume entry are to be matched.
413 const TUint KEntryAttMaskSupported=0x3f;
422 Bit mask for matching file and directory entries.
424 This is used for exclusive matching. When OR'ed with one or more file attribute
425 constants, for example, KEntryAttNormal, it ensures that only the files with
426 those attributes are matched.
427 When OR’ed with KEntryAttDir, directories only (not hidden or system) are matched.
433 const TUint KEntryAttMatchExclusive=0x40000000;
442 Bit mask for feature manager file entries.
444 It is used in order to identify each ROM feature set data file
445 uniquely in the mount order of ROM sections.
448 const TUint KEntryAttUnique=0x01000000;
457 Bit mask for matching file and directory entries.
459 It is used to exclude files or directories with certain attributes from
460 directory listings. This bitmask has the opposite effect
461 to KEntryAttMatchExclusive. For example:
464 KEntryAttMatchExclude|KEntryAttReadOnly
467 excludes all read only entries from the directory listing.
470 KEntryAttMatchExclusive|KEntryAttReadOnly
472 lists only read only entries.
474 @see KEntryAttMatchExclusive
477 const TUint KEntryAttMatchExclude=0x08000000;
486 Bit mask for matching file and directory entries.
488 Bit mask flag used when UID information should be included in the directory
493 const TUint KEntryAttAllowUid=0x10000000;
502 Indicates that a TEntry (that is generally returned from a TEntryArray) is
503 stored in packed format where the iSizeHigh and iReserved fields follow the
504 valid characters of the name string. Before accessing the aforementioned
505 members, the entry must be unpacked.
508 const TUint KEntryAttPacked = 0x01000000;
515 const TUint KMaxMapsPerCall = 0x8;
525 A set of change notification flags.
527 These flags indicate the kind of change that should result in notification.
529 This is useful for programs that maintain displays of file lists that
530 must be dynamically updated.
532 @see RFs::NotifyChange
539 Any change, including mounting and unmounting drives.
545 Addition or deletion of a directory entry, or changing or formatting a disk.
551 Change resulting from file requests:
552 RFile::Create(), RFile::Replace(), RFile::Rename(), RFs::Delete(),
553 RFs::Replace(), and RFs::Rename().
559 Change resulting from directory requests:
560 RFs::MkDir(), RFs::RmDir(), and RFs::Rename().
566 Change resulting from: RFs::SetEntry(), RFile::Set(), RFile::SetAtt(),
567 RFile::SetModified() and RFile::SetSize() requests.
569 ENotifyAttributes=0x10,
573 Change resulting from the RFile::Write() request.
579 Change resulting from the RRawDisk::Write() request.
588 Notification modes for safe media removal notification API
590 @see RFs::NotifyDismount
592 enum TNotifyDismountMode
594 /** Used by a client to register for notification of pending dismount. This is the default behaviour for RFs::NotifyDismount*/
595 EFsDismountRegisterClient=0x01,
598 Used for graceful file system dismounting with notifying clients of a pending dismount.
599 If all clients have responded by RFs::AllowDismount(), the file system will be dismounted.
601 EFsDismountNotifyClients=0x02,
603 /** Used to forcibly dismount the file system without notifying clients. */
604 EFsDismountForceDismount=0x03,
613 Flags used to enable file server drive-specific caching
617 Enable read caching - if file explicitly opened in EFileReadBuffered mode
619 EFileCacheReadEnabled = 0x01,
622 Enable read caching for all files, regardless of file open mode
624 EFileCacheReadOn = 0x02,
627 Enable read-ahead caching - if file explicitly opened in EFileReadAheadOn mode
629 EFileCacheReadAheadEnabled = 0x04,
632 Enable read-ahead caching, regardless of file open mode
634 EFileCacheReadAheadOn = 0x08,
637 Enable write caching, if file explicitly opened in EFileWriteBuffered mode
639 EFileCacheWriteEnabled = 0x10,
642 Enable write caching for all files, regardless of file open mode
644 EFileCacheWriteOn = 0x20,
651 Commands to query specific volume information.
653 @see TVolumeIOParamInfo
655 enum TQueryVolumeInfoExtCmd
658 Queries the sub type of the file system mounted on a specified volume.
659 For example, FAT12, FAT16 or FAT32.
664 Queries the I/O parameters of a specificed volume.
665 This includes the block size, the cluster size and the recommended read and write sizes for the media.
670 This command determines whether the volume is synchronous or asynchronous.
671 A boolean value is returned within the buffer defined as TPckgBuf<TBool>.
672 ETrue for Synchronous and EFalse for Asynchronous.
677 Query if the given drive is finalised. See RFs::FinaliseDrive()
678 Not all file systems may support this query.
679 A boolean value is returned within the buffer defined as TPckgBuf<TBool>.
680 ETrue value means that the drive is finalised
689 Volume IO parameter information.
691 This class is used to return IO parameter information for a specified volume.
693 The volume parameter information holds recommended buffer sizes for the creation of efficient buffers for
696 @see RFs::VolumeIOParam()
698 class TVolumeIOParamInfo
702 The size of a block in bytes.
704 Reads and writes that are aligned on block boundaries are up to twice as fast as when
707 Read and write operations on certain underlying media is done in blocks.
708 A write operation that modifies only part of a block is less efficient, in general, than
709 one that modifies an entire block. Data throughput degrades linearly for reads and writes in smaller
714 The size in bytes of a single disk cluster.
716 Read and write operations that are aligned on cluster boundaries are more efficient.
718 The file system organises and allocates the file data on the disk in clusters where each cluster is
719 one or more blocks. Files that are not zero length occupy at least one cluster of the disk,
720 so large numbers of very small files use up more disk space than expected.
724 The recommended buffer size for optimised reading performance.
726 The given buffer size is based on sensible benchmark testing results produced by the mobile device vendor.
727 The buffer size is then added to the estart.txt file
729 The figure is included in the estart.txt file along with the drive number and the variable name.
730 The example below shows the required format:
735 When no value is provided, value KErrNotSupported is returned.
737 TInt iRecReadBufSize;
739 The recommended buffer size for optimised writing performance.
741 The given buffer size is based on sensible benchmark testing results produced by the mobile device vendor.
742 The buffer size is then added to the estart.txt file
744 The figure is included in the estart.txt file along with the drive number and the variable name.
745 The example below shows the required format:
748 RecWriteBufSize 16384
750 When no value is provided, value KErrNotSupported is returned.
752 TInt iRecWriteBufSize;
756 The maximum file size that is supported by the file system mounted on this volume.
757 Not all file system may provide this parameter; The value KMaxTUint64 (0xffffffffffffffff) means that this particular file system hasn't
758 provided this information.
760 TUint64 iMaxSupportedFileSize;
764 Reserved space for future use
774 The drive number enumeration.
777 EDriveA, EDriveB, EDriveC, EDriveD, EDriveE,
778 EDriveF, EDriveG, EDriveH, EDriveI, EDriveJ,
779 EDriveK, EDriveL, EDriveM, EDriveN, EDriveO,
780 EDriveP, EDriveQ, EDriveR, EDriveS, EDriveT,
781 EDriveU, EDriveV, EDriveW, EDriveX, EDriveY,
793 Flags indicating the order in which directory entries are to be sorted.
796 @see CDirScan::SetScanDataL
801 The default; no sorting takes place
807 Sort according to alphabetic order of file and directory name.
809 This setting is mutually exclusive with ESortByExt, ESortBySize,
810 ESortByDate and ESortByUid.
816 Sort according to alphabetic order of file extension.
818 Files without an extension take precedence over files with an extension.
819 For files with the same extension or without an extension, the default is
822 This setting is mutually exclusive with ESortByName, ESortBySize,
823 ESortByDate and ESortByUid.
829 Sort according to file size.
831 This setting is mutually exclusive with ESortByName, ESortByExt,
832 ESortByDate and ESortByUid.
838 Sort according to files' last modified time and date.
840 By default, most recent last.
842 This setting is mutually exclusive with ESortByName, ESortByExt,
843 ESortBySize and ESortByUid.
849 Sort according to file UID.
851 This setting is mutually exclusive with ESortByName, ESortByExt,
852 ESortBySize and ESortByDate.
858 Qualifies the sort order; if set, directories are listed in the order in
863 This flag is mutually exclusive with EDirsFirst and EDirslast.
869 Qualifies the sort order; if set, directories come before files in sort order.
871 This flag is mutually exclusive with EDirsAnyOrder and EDirsLast.
877 Qualifies the sort order; if set, files come before directories in sort order.
879 This flag is mutually exclusive with EDirsAnyOrder and EDirsFirst.
885 Qualifies the sort order; files are sorted in ascending order, i.e. from A to Z.
886 This is the default behaviour.
888 This flag is mutually exclusive with EDescending and EDirDescending.
894 Qualifies the sort order; files are sorted in descending order, i.e. from Z to A.
896 This flag is mutually exclusive with EAscending and EDirDescending.
902 Qualifies the sort order; directories are sorted in descending order, i.e. from Z to A.
904 This flag shall be used in combination with either EDirsFirst or EDirsLast.
905 This flag is mutually exclusive with EAscending and EDescending.
918 Access and share modes available when opening a file.
920 The access mode indicates whether the file is opened just for reading or
923 The share mode indicates whether other RFile objects can access the
924 open file, and whether this access is read only.
926 Use EFileShareReadersOrWriters if a client does not care whether the file has
927 been previously opened for ReadOnly or Read/Write access.
929 If EFileShareReadersOrWriters is not used, then a client needs to cooperate with
930 other clients in order to open the file with the correct share mode, either
931 EFileShareReadersOnly or EFileShareAny, depending on the share mode used when
932 the file was originally opened.
934 To open a file for reading and writing with read and write shared access,
938 _LIT(KFilename, "filename.ext");
940 file.Open(theFs, KFilename, EFileShareAny|EFileWrite);
943 If another instance of RFile tries to open this file in EFileShareExclusive
944 or EFileShareReadersOnly mode, access is denied. However, it can be opened
945 in EFileShareAny mode or EFileShareReadersOrWriters mode.
947 If a file is opened with EFileShareReadersOrWriters, and the file is opened for
948 sharing by another client, then the file share mode is promoted to the new share
949 mode. When the file handle is closed then the share mode is demoted back to
950 EFileShareReadersOrWriters.
954 Table of FileShare promotion rules
955 ----------------------------------
957 Client A Client B Resultant Share Mode
958 -------- -------- --------------------
959 ReadersOnly ReadersOnly ReadersOnly
960 ReadersOnly ReadersOrWriters|EFileRead ReadersOnly
961 ReadersOnly ReadersOrWriters|EFileWrite INCOMPATIBLE
962 ReadersOnly Any INCOMPATIBLE
964 ReadersOrWriters|EFileRead ReadersOnly ReadersOnly
965 ReadersOrWriters|EFileRead ReadersOrWriters|EFileRead ReadersOrWriters
966 ReadersOrWriters|EFileRead ReadersOrWriters|EFileWrite ReadersOrWriters
967 ReadersOrWriters|EFileRead Any Any
969 ReadersOrWriters|EFileWrite ReadersOnly INCOMPATIBLE
970 ReadersOrWriters|EFileWrite ReadersOrWriters|EFileRead ReadersOrWriters
971 ReadersOrWriters|EFileWrite ReadersOrWriters|EFileWrite ReadersOrWriters
972 ReadersOrWriters|EFileWrite Any Any
974 Any ReadersOnly INCOMPATIBLE
975 Any ReadersOrWriters|EFileRead Any
976 Any ReadersOrWriters|EFileWrite Any
980 Use the following guidance notes for selecting FileShare mode with shared RFile objects:
983 - Use this mode to request both read and write access when another client needs
984 to write to the file and respective client access to the file is coordinated.
985 - To open a file for non-exclusive write, use EFileShareAny | EFileWrite.
986 - It is recommended that either EFileShareAny or EFileShareAny | EFileRead are
987 not used. These combinations will block users attempting to use the
988 EFileShareReadersOnly mode even if all the EFileShareAny handles do not have
989 the EFileWrite bit set as the EFileRead and EFileWrite bits have no affect on
990 sharing. Use either EFileShareReadersOnly or EFileShareReadersOrWriters.
992 EFileShareReadersOrWriters
993 - Use this mode when it does not matter if another file writes to the file and
994 file access can not be coordinated as other clients are unknown.
995 - To open a file for shared read access whilst permitting writers, use
996 EFileShareReadersOrWriters | EFileRead.
998 - For write access with unrestricted share mode,
999 EFileShareReadersOrWriters | EFileWrite may be used however
1000 EFilesShareAny | EFileWrite is preferred.
1002 EFileShareReadersOnly
1003 - Use this mode to get read access to the file and deny write access for any
1004 other handles on this file.
1005 - To open a file for shared read access whilst disallowing writers use
1006 EFileShareReadersOnly.
1009 Files may be opened in text or binary mode. Native Symbian OS application
1010 files are nearly all binary, (so they will usually be opened in binary mode).
1011 However, they can be opened in text mode (to support testing, and to make them
1012 compatible with text formats on remote systems).
1013 Symbian OS native text format uses CR-LF (ASCII 0x0d, 0x0a) to denote the end of
1014 a line. When reading, however, any combination of CR, LF, LF-CR or CR-LF is
1015 recognised as the end of a line. Where a remote file system uses a different
1016 format, it is the responsibility of the installable file system to present
1017 an interface for text files which conforms with this format.
1019 The share mode may be OR’ed with either EFileStream or EFileStreamText.
1021 Additionally, it may be OR’ed with either EFileRead or EFileWrite.
1025 Exclusive access for the program opening the file.
1027 No other program can access the file until it is closed.
1028 If another program is already accessing the file in any share mode, then
1029 an attempt to open it with an EFileShareExclusive will fail.
1031 EFileShareExclusive,
1037 This means that the file may only be accessed for reading.
1038 A file cannot be opened using a share mode of EFileShareReadersOnly with
1041 EFileShareReadersOnly,
1045 Shared access for reading and writing.
1047 This means that other programs may share access to the file for reading
1048 and writing with the program which opened the file.
1050 When using this mode, the program is expecting another program to be able
1051 to write to the file, so is not compatible with EFileShareReadersOnly.
1057 Shared access for reading and writing.
1059 This means that other programs may share access to the file for reading
1060 and writing with the program which opened the file.
1062 When using this mode, the program does not care if another program has
1063 the file open for read or write access.
1065 EFileShareReadersOrWriters,
1069 For files to be opened in binary mode.
1075 For files to be opened in text mode.
1077 EFileStreamText=0x100,
1081 The file may be read from but not written to.
1087 The file may be read from and written to
1089 Cannot be combined with a share mode of EFileShareReadersOnly.
1094 Specifies that an asynchronous read request should not be completed
1095 until all requested data becomes available.
1097 Cannot be combined with the EFileShareExclusive or EFileShareReadersOnly
1098 share modes as this will prohibit a writer from updating the file.
1100 EFileReadAsyncAll=0x400,
1103 Enables write buffering
1105 EFileWriteBuffered =0x00000800,
1108 Disables write buffering
1110 EFileWriteDirectIO =0x00001000,
1113 Enables read buffering
1115 EFileReadBuffered =0x00002000,
1118 Disables read buffering
1120 EFileReadDirectIO =0x00004000,
1125 EFileReadAheadOn =0x00008000,
1128 Disables read ahead.
1130 EFileReadAheadOff =0x00010000,
1133 Enable delete on close
1135 EDeleteOnClose =0x00020000,
1138 Enables operations on large files.
1143 EFileBigFile =0x00040000
1154 Bit mask provided for retrieving a file's share mode.
1158 const TUint KFileShareMask=0xff;
1172 Indicates a high density floppy disk to be formatted.
1176 Can be ORed with EFullFormat or EQuickFormat, but does not
1183 Indicates a low density floppy disk to be formatted.
1187 Can be ORed with EFullFormat or EQuickFormat, but does not
1194 Performs a full format, erasing whole media content and creating
1195 new file system layout.
1197 This is the default mode.
1203 Performs a quick media format, erasing only required minimum media content.
1204 For example, for FAT file system it resets FAT and root directory content.
1205 Also preserves bad sectors if there are some on the volume.
1211 Indicates a custom formatting mode. In this mode some optional file system
1212 specific parameters may be passed to RFormat::Open().
1215 @see TInt RFormat::Open(RFs &aFs, const TDesC &aName, TUint aFormatMode, TInt &aCount, const TDesC8 &anInfo);
1217 ESpecialFormat=0x200,
1220 Forced erase of locked media
1225 This flag enables formatting the volume even if it has files or directories opened on it.
1226 If this flag is specified, the volume will be forcedly dismounted before performing media formatting.
1228 Even with this flag the RFormat::Open() can fail with KErrInUse in following cases:
1229 1. if there are clamped files on the volume.
1230 2. there are opened "disk access" objects, like RFormat or RRawDisk on the volume.
1232 EForceFormat = 0x800,
1244 Flags indicating the destination of a seek operation.
1246 File locations are specified as a 32-bit signed integer,
1247 allowing offsets of ?GB from the origin of the seek.
1253 This can only be used for file systems with execute-in-place facilities,
1254 such as the ROM file system: the offset specifies the absolute address of
1261 Destination is the start of file.
1267 Destination is the current position in file.
1273 Destination is the end of file.
1283 class TBlockMapEntry : public TBlockMapEntryBase
1286 IMPORT_C TBlockMapEntry();
1287 IMPORT_C void SetNumberOfBlocks( TUint aNumberOfBlocks );
1288 IMPORT_C void SetStartBlock( TUint aStartBlock );
1296 typedef TBuf8<KMaxMapsPerCall*sizeof(TBlockMapEntry)> TBlockArrayDes;
1298 struct SBlockMapInfo : public SBlockMapInfoBase
1300 TBlockArrayDes iMap;
1310 EBlockMapUsagePaging,
1320 Encapsulates an entry in a directory, which can be another (nested) directory,
1321 a file or a volume label.
1323 Each directory entry has a name which is relative to its owning directory
1324 and a type, which is indicated by its unique identifier (UID).
1326 An entry can be interrogated for the following properties:
1328 1. the kind of entry: stored in the entry UIDs, stored in iType
1330 2. the entry attributes, stored in iAtt
1332 3. the size of entry
1334 4. the time the entry was last modified.
1339 @see CfileBase::CurrentEntry
1344 IMPORT_C TEntry(const TEntry& aEntry);
1345 IMPORT_C TEntry& operator=(const TEntry& aEntry);
1346 IMPORT_C TBool IsReadOnly() const;
1347 IMPORT_C TBool IsHidden() const;
1348 IMPORT_C TBool IsSystem() const;
1349 IMPORT_C TBool IsDir() const;
1350 IMPORT_C TBool IsArchive() const;
1351 inline const TUid& operator[](TInt anIndex) const;
1352 inline TBool IsUidPresent(TUid aUid) const;
1353 inline TBool IsTypeValid() const;
1354 inline TUid MostDerivedUid() const;
1355 IMPORT_C TInt64 FileSize() const;
1356 inline void SetFileSize(TInt64 aFileSize);
1359 inline void Copy(const TEntry& aEntry);
1360 inline void Unpack();
1364 The individual bits within this byte indicate which attributes
1367 @see KEntryAttNormal
1368 @see KEntryAttReadOnly
1369 @see KEntryAttHidden
1370 @see KEntryAttSystem
1376 The size of the file in bytes.
1377 For files larger that 2G it must be cast to TUint in order to avoid looking like negative signed.
1383 The local time of last modification.
1395 The name of the file relative to the owning directory,
1396 with a maximum of KMaxFileName characters.
1400 TBufC<KMaxFileName> iName;
1405 Reserved for future expansion
1419 Array of directory entries.
1421 It contains the results of a call to RDir::Read(): it will contain all
1422 the TEntry items in the directory. Thus, a directory can be read in
1423 a single call, minimising client/server communication overheads.
1430 IMPORT_C TEntryArray();
1431 IMPORT_C TInt Count() const;
1432 IMPORT_C const TEntry& operator[](TInt anIndex) const;
1437 TBuf8<KEntryArraySize> iBuf;
1440 friend class TRawEntryArray;
1451 Contains drive information.
1458 The type of media mounted on the drive.
1464 Indicates whether the drive supports a battery, and if so, its state.
1466 TBatteryState iBattery;
1470 The drive attributes.
1474 @see KDriveAttRedirected
1475 @see KDriveAttSubsted
1476 @see KDriveAttInternal
1477 @see KDriveAttRemovable
1478 @see KDriveAttExternal
1484 The attributes of the media mounted on the drive.
1486 @see KMediaAttVariableSize
1487 @see KMediaAttDualDensity
1488 @see KMediaAttFormattable
1489 @see KMediaAttWriteProtected
1490 @see KMediaAttLockable
1491 @see KMediaAttLocked
1497 The type of interface used to connect to the media.
1499 TConnectionBusType iConnectionBusType;
1510 Contains information about a volume mounted on a drive. Use RFs::Drive() if only
1511 the drive information is required.
1513 If a drive supports removable media it may contain different volumes over time.
1515 Volume information is made up of information concerning the drive on which it is mounted,
1516 which can also be accessed through RFs::Drive(), and the volume information, this is made
1517 up of the size of the volume, the free space, its unique identifying number and a name.
1519 TVolumeInfo is initialised by RFs::Volume().
1526 IMPORT_C TVolumeInfo();
1529 Information about the drive on which the volume is mounted.
1537 The volume’s unique identifying number.
1543 The maximum size of the volume in bytes. The current amount of memory
1544 in use plus the amount of free memory.
1550 The amount of free space on the volume in bytes.
1556 Name of the volume, with a maximum of KMaxFileName characters.
1558 This field is optional.
1562 TBufC<KMaxFileName> iName;
1565 Flags which define the default file-caching behaviour for this volume
1567 @see TFileCacheFlags
1569 TFileCacheFlags iFileCacheFlags;
1574 Internal flag, used in the case of non-blocking getting volume information.
1575 @see RFs::Volume(TVolumeInfo& aVol,TInt aDrive, TRequestStatus& aStat)
1577 If this flag is set, it means that the volume information will be obtained
1578 asynchronously. More specific, on return iFree will reflect the _current_ amount of free space on volume at the moment of
1579 RFs::Volume() call, not the exact final value. This is because in this case getting volume information will be asynchronous,
1580 and the client will not be suspended until the mount finish calculating free space. At present appicable to FAT32 file system only.
1582 TUint8 iVolSizeAsync : 1;
1586 Reserved for future expansion
1589 TUint16 i16Reserved1;
1590 TUint32 i32Reserved1;
1591 TUint32 i32Reserved2;
1602 Drive numbers and letters.
1604 A drive may be represented by either an integer between zero and twenty five
1605 inclusive, or by a buffer descriptor containing a character between "A" and "Z"
1606 inclusive, followed by a colon.
1607 This class encapsulates both representations.
1608 An instance of this class is constructed specifying either the drive number
1609 or the drive letter and may be converted between the two representations.
1613 inline TDriveUnit() {};
1614 IMPORT_C TDriveUnit(TInt aDrive);
1615 IMPORT_C TDriveUnit(const TDesC& aDrive);
1616 IMPORT_C TDriveUnit& operator=(TInt aDrive);
1617 IMPORT_C TDriveUnit& operator=(const TDesC& aDrive);
1618 inline operator TInt() const;
1619 IMPORT_C TDriveName Name() const;
1634 Base class for file name parsing.
1636 You first need to set up the path to be parsed using either a TParse, TParsePtr
1637 or TParsePtrC object.
1639 The interrogation and extraction functions in this class allow you to test
1640 whether a component has been specified in the pathname, and if so,
1641 to extract it. If a component is not present in the pathname,
1642 the extraction function returns an empty string.
1644 This class also allows directories to be added to, and popped from the path.
1648 1. the filename modification functions cannot be used by the TParsePtrC class.
1650 2. navigation using .. and . is not supported.
1658 struct SField {TUint8 pos;TUint8 len;TUint8 present;TUint8 filler;};
1659 enum TField {EDrive,EPath,EName,EExt,EMaxFields};
1660 enum TWild {EWildName=0x01,EWildExt=0x02,EWildEither=0x04,EIsRoot=0x08,EWildIsKMatchOne=0x10,EWildIsKMatchAny=0x20};
1662 IMPORT_C TParseBase();
1663 IMPORT_C TInt PopDir();
1664 IMPORT_C TInt AddDir(const TDesC& aName);
1665 IMPORT_C const TDesC& FullName() const;
1666 IMPORT_C TPtrC Drive() const;
1667 IMPORT_C TPtrC Path() const;
1668 IMPORT_C TPtrC DriveAndPath() const;
1669 IMPORT_C TPtrC Name() const;
1670 IMPORT_C TPtrC Ext() const;
1671 IMPORT_C TPtrC NameAndExt() const;
1672 IMPORT_C TBool DrivePresent() const;
1673 IMPORT_C TBool PathPresent() const;
1674 IMPORT_C TBool NamePresent() const;
1675 IMPORT_C TBool ExtPresent() const;
1676 IMPORT_C TBool NameOrExtPresent() const;
1677 IMPORT_C TBool IsRoot() const;
1678 IMPORT_C TBool IsWild() const;
1679 IMPORT_C TBool IsKMatchOne() const;
1680 IMPORT_C TBool IsKMatchAny() const;
1681 IMPORT_C TBool IsNameWild() const;
1682 IMPORT_C TBool IsExtWild() const;
1684 virtual TDes& NameBuf() = 0; // Reference to derived class descriptor containing the filename.
1685 virtual const TDesC& NameBufC() const = 0; // const reference to derived class descriptor containing the filename.
1686 TInt Set(const TDesC* aName,const TDesC* aRelated,const TDesC* aDefault,TBool allowWild);
1688 TInt ParseDrive(TLex& aName,TBool& aDone);
1689 TInt ParsePath(TLex& aName,TBool& aDone);
1690 TInt ParseName(TLex& aName,TBool& aDone);
1691 TInt ParseExt(TLex& aName,TBool& aDone);
1693 TInt16 iMod; // Non-zero indicates File name modification functionality is enabled.
1696 SField iField[EMaxFields];
1702 class TParsePtr : public TParseBase
1707 Parses filenames using less space on the stack than TParse.
1709 Stores a reference to a filename, unlike TParse, which uses
1710 a 512 byte TFileName object as an internal buffer to store
1711 a copy of the filename.
1712 The filename's components (drive, path, etc.) can be retrieved using
1713 the functions provided by the base class, TParseBase.
1714 This class should be used in preference to TParse when minimising stack
1715 usage is a priority.
1722 IMPORT_C TParsePtr(TDes& aName);
1724 IMPORT_C TDes& NameBuf();
1725 IMPORT_C const TDesC& NameBufC() const;
1733 class TParsePtrC : public TParseBase
1738 Parses, but cannot modify, filenames using less space on the stack than TParse.
1740 Stores a reference to a filename, unlike TParse, which uses
1741 a 512 byte TFileName object as an internal buffer to store
1742 a copy of the filename.
1743 The filename's components (drive, path, etc.) can be retrieved using
1744 the functions provided by the base class, TParseBase.
1745 Note that because the filename cannot be modified through this class,
1746 the base class functions PopDir() and AddDir() cannot be called, because
1747 a panic will be raised.
1754 IMPORT_C TParsePtrC(const TDesC& aName);
1756 IMPORT_C TDes& NameBuf();
1757 IMPORT_C const TDesC& NameBufC() const;
1765 class TParse : public TParseBase
1772 The class uses the full filename structure supported by Symbian OS.
1774 TParse works by using the Set() function to set up the filename to be parsed.
1775 Then, various getter functions defined in the base class, TParseBase, such as:
1776 FullName(), Drive(), Path(), DriveAndPath(), Name(), Ext() and NameAndExt()
1777 may be used to retrieve path components.
1779 There are a number of restrictions to valid path components, which are
1780 described in guide documentation.
1785 IMPORT_C TInt Set(const TDesC& aName,const TDesC* aRelated,const TDesC* aDefault);
1786 IMPORT_C TInt SetNoWild(const TDesC& aName,const TDesC* aRelated,const TDesC* aDefault);
1788 IMPORT_C TDes& NameBuf();
1789 IMPORT_C const TDesC& NameBufC() const;
1797 class CDir : public CBase
1802 Array of directory entries that has been read into memory from the file system.
1804 It can be read and sorted by user programs, but cannot be created by them.
1808 IMPORT_C virtual ~CDir();
1809 IMPORT_C TInt Count() const;
1810 IMPORT_C const TEntry& operator[](TInt anIndex) const;
1811 IMPORT_C TInt Sort(TUint aEntrySortKey);
1814 IMPORT_C static CDir* NewL();
1815 IMPORT_C void AddL(const TEntry& anEntry);
1816 IMPORT_C void ExtractL(TBool aRemove,CDir*& aDir);
1817 IMPORT_C void Compress();
1819 CArrayPakFlat<TEntry>* iArray;
1821 friend class TOpenFileScan;
1825 #if defined SYMBIAN_PRIVATE_EFSRV
1826 #define EFSRV_EXPORT_C
1827 #define EFSRV_IMPORT_C
1829 #define EFSRV_EXPORT_C EXPORT_C
1830 #define EFSRV_IMPORT_C IMPORT_C
1834 class RFs : public RSessionBase
1839 A handle to a file server session.
1841 A program or thread may have arbitrarily many sessions open simultaneously.
1843 Use this class for all file system manipulation, including:
1845 1. adding, removing, moving and renaming files and directories
1847 2. inspecting and changing file attributes and directory entry details.
1848 These include the time and date when the file or directory was last
1849 written to, its size and various attribute flags such as read-only,
1850 hidden, archive or system.
1852 3. finding a file’s real name; if the file system on which it is stored
1853 has to "mangle" the name into a shorter format
1855 4. getting directory listings
1857 5. maintaining a default path; unlike some other systems, there is a single
1858 system default path, rather than one for each drive: the default path
1859 consists of a drive and a path specification.
1861 6. performing context-sensitive parses using TParse objects, and
1864 7. obtaining information on drives and volumes
1866 8. formatting and labelling volumes
1868 9. obtaining a list of valid drives
1870 10. emulating the DOS subst command, which allows any directory to appear
1871 as if it were a separate drive
1873 11. requesting notification of when significant change occurs.
1874 This can be used for programs which maintain file lists, but must
1875 update those lists when change occurs.
1877 12. finding the version number of the file server
1879 13. resource counting to ensure that all resources are closed when
1880 the session terminates.
1882 This class is not intended for user derivation.
1884 The following restrictions apply when a path is specified:
1886 1. its total length must not exceed 256 characters
1888 2. wildcards cannot be used in the drive or in any directory name,
1889 although they may be allowed in the filename and extension.
1891 3. double backslashes are not allowed in the path.
1893 4. the following characters must not be included anywhere in the path: < > " / |
1895 5. a colon may only be included between the drive and path
1897 6. no directory name or filename plus extension may consist solely
1898 of space characters, or of a single or double dot.
1900 7. spaces between the drive, if specified, and the first directory in
1901 the path are illegal, although there may be spaces between other
1902 path components, for instance between directories.
1906 EFSRV_IMPORT_C TInt Connect(TInt aMessageSlots=KFileServerDefaultMessageSlots);
1907 EFSRV_IMPORT_C void Close();
1908 EFSRV_IMPORT_C TVersion Version() const;
1909 EFSRV_IMPORT_C TInt AddFileSystem(const TDesC& aFileName) const;
1910 EFSRV_IMPORT_C TInt MountFileSystem(const TDesC& aFileSystemName,TInt aDrive) const;
1911 EFSRV_IMPORT_C TInt MountFileSystem(const TDesC& aFileSystemName,TInt aDrive, TBool aIsSync) const;
1912 EFSRV_IMPORT_C TInt MountFileSystemAndScan(const TDesC& aFileSystemName,TInt aDrive,TBool& aIsMountSuccess) const;
1913 EFSRV_IMPORT_C TInt MountFileSystem(const TDesC& aFileSystemName,const TDesC& aExtensionName,TInt aDrive);
1914 EFSRV_IMPORT_C TInt MountFileSystem(const TDesC& aFileSystemName,const TDesC& aExtensionName,TInt aDrive, TBool aIsSync);
1915 EFSRV_IMPORT_C TInt MountFileSystemAndScan(const TDesC& aFileSystemName,const TDesC& aExtensionName,TInt aDrive,TBool& aIsMountSuccess) const;
1916 EFSRV_IMPORT_C TInt DismountFileSystem(const TDesC& aFileSystemName,TInt aDrive) const;
1917 EFSRV_IMPORT_C TInt RemoveFileSystem(const TDesC& aFileSystemName) const;
1918 EFSRV_IMPORT_C TInt FileSystemName(TDes& aName,TInt aDrive) const;
1919 EFSRV_IMPORT_C TInt AddExtension(const TDesC& aFileName);
1920 EFSRV_IMPORT_C TInt MountExtension(const TDesC& aExtensionName,TInt aDrive);
1921 EFSRV_IMPORT_C TInt DismountExtension(const TDesC& aExtensionName,TInt aDrive);
1922 EFSRV_IMPORT_C TInt RemoveExtension(const TDesC& aExtensionName);
1923 EFSRV_IMPORT_C TInt ExtensionName(TDes& aExtensionName,TInt aDrive,TInt aPos);
1924 EFSRV_IMPORT_C TInt RemountDrive(TInt aDrive,const TDesC8* aMountInfo=NULL,TUint aFlags=0);
1925 EFSRV_IMPORT_C void NotifyChange(TNotifyType aType,TRequestStatus& aStat);
1926 EFSRV_IMPORT_C void NotifyChange(TNotifyType aType,TRequestStatus& aStat,const TDesC& aPathName);
1927 EFSRV_IMPORT_C void NotifyChangeCancel();
1928 EFSRV_IMPORT_C void NotifyChangeCancel(TRequestStatus& aStat);
1929 EFSRV_IMPORT_C void NotifyDiskSpace(TInt64 aThreshold,TInt aDrive,TRequestStatus& aStat);
1930 EFSRV_IMPORT_C void NotifyDiskSpaceCancel(TRequestStatus& aStat);
1931 EFSRV_IMPORT_C void NotifyDiskSpaceCancel();
1932 EFSRV_IMPORT_C TInt DriveList(TDriveList& aList) const;
1933 EFSRV_IMPORT_C TInt DriveList(TDriveList& aList, TUint aFlags) const;
1934 EFSRV_IMPORT_C TInt Drive(TDriveInfo& anInfo,TInt aDrive=KDefaultDrive) const;
1935 EFSRV_IMPORT_C TInt Volume(TVolumeInfo& aVol,TInt aDrive=KDefaultDrive) const;
1936 EFSRV_IMPORT_C void Volume(TVolumeInfo& aVol,TInt aDrive, TRequestStatus& aStat) const;
1937 EFSRV_IMPORT_C TInt SetVolumeLabel(const TDesC& aName,TInt aDrive=KDefaultDrive);
1938 EFSRV_IMPORT_C TInt Subst(TDes& aPath,TInt aDrive=KDefaultDrive) const;
1939 EFSRV_IMPORT_C TInt SetSubst(const TDesC& aPath,TInt aDrive=KDefaultDrive);
1940 EFSRV_IMPORT_C TInt RealName(const TDesC& aName,TDes& aResult) const;
1941 EFSRV_IMPORT_C TInt GetMediaSerialNumber(TMediaSerialNumber& aSerialNum, TInt aDrive);
1942 EFSRV_IMPORT_C TInt SessionPath(TDes& aPath) const;
1943 EFSRV_IMPORT_C TInt SetSessionPath(const TDesC& aPath);
1944 EFSRV_IMPORT_C TInt Parse(const TDesC& aName,TParse& aParse) const;
1945 EFSRV_IMPORT_C TInt Parse(const TDesC& aName,const TDesC& aRelated,TParse& aParse) const;
1946 EFSRV_IMPORT_C TInt MkDir(const TDesC& aPath);
1947 EFSRV_IMPORT_C TInt MkDirAll(const TDesC& aPath);
1948 EFSRV_IMPORT_C TInt RmDir(const TDesC& aPath);
1949 EFSRV_IMPORT_C TInt GetDir(const TDesC& aName,TUint anEntryAttMask,TUint anEntrySortKey,CDir*& anEntryList) const;
1950 EFSRV_IMPORT_C TInt GetDir(const TDesC& aName,TUint anEntryAttMask,TUint anEntrySortKey,CDir*& anEntryList,CDir*& aDirList) const;
1951 EFSRV_IMPORT_C TInt GetDir(const TDesC& aName,const TUidType& anEntryUid,TUint anEntrySortKey,CDir*& aFileList) const;
1952 EFSRV_IMPORT_C TInt Delete(const TDesC& aName);
1953 EFSRV_IMPORT_C TInt Rename(const TDesC& anOldName,const TDesC& aNewName);
1954 EFSRV_IMPORT_C TInt Replace(const TDesC& anOldName,const TDesC& aNewName);
1955 EFSRV_IMPORT_C TInt Att(const TDesC& aName,TUint& aAttValue) const;
1956 EFSRV_IMPORT_C TInt SetAtt(const TDesC& aName,TUint aSetAttMask,TUint aClearAttMask);
1957 EFSRV_IMPORT_C TInt Modified(const TDesC& aName,TTime& aTime) const;
1958 EFSRV_IMPORT_C TInt SetModified(const TDesC& aName,const TTime& aTime);
1959 EFSRV_IMPORT_C TInt Entry(const TDesC& aName,TEntry& anEntry) const;
1960 EFSRV_IMPORT_C TInt SetEntry(const TDesC& aName,const TTime& aTime,TUint aSetAttMask,TUint aClearAttMask);
1962 EFSRV_IMPORT_C TInt ReadFileSection_RESERVED(const TDesC& aName,TInt aPos,TDes8& aDes,TInt aLength) const;
1964 EFSRV_IMPORT_C static TBool IsValidDrive(TInt aDrive);
1965 EFSRV_IMPORT_C static TInt CharToDrive(TChar aChar,TInt& aDrive);
1966 EFSRV_IMPORT_C static TInt DriveToChar(TInt aDrive,TChar& aChar);
1967 EFSRV_IMPORT_C static TBool IsRomAddress(TAny* aAny);
1968 EFSRV_IMPORT_C static TDriveNumber GetSystemDrive();
1969 EFSRV_IMPORT_C static TChar GetSystemDriveChar();
1970 EFSRV_IMPORT_C TInt SetSystemDrive(TDriveNumber aSystemDrive);
1971 EFSRV_IMPORT_C void ResourceCountMarkStart() const;
1972 EFSRV_IMPORT_C void ResourceCountMarkEnd() const;
1973 EFSRV_IMPORT_C TInt ResourceCount() const;
1974 EFSRV_IMPORT_C TInt IsFileOpen(const TDesC& aFile,TBool& anAnswer) const;
1975 EFSRV_IMPORT_C TInt CheckDisk(const TDesC& aDrive) const;
1976 EFSRV_IMPORT_C TInt ScanDrive(const TDesC& aDrive) const;
1977 EFSRV_IMPORT_C TInt GetShortName(const TDesC& aLongName,TDes& aShortName) const;
1978 EFSRV_IMPORT_C TInt GetLongName(const TDesC& aShortName,TDes& aLongName) const;
1979 EFSRV_IMPORT_C TBool GetNotifyUser();
1980 EFSRV_IMPORT_C void SetNotifyUser(TBool aValue);
1981 EFSRV_IMPORT_C TUint8* IsFileInRom(const TDesC& aFileName) const;
1982 EFSRV_IMPORT_C TBool IsValidName(const TDesC& anEntryName) const;
1983 EFSRV_IMPORT_C TBool IsValidName(const TDesC& aFileName,TText& aBadChar) const;
1984 EFSRV_IMPORT_C TInt GetDriveName(TInt aDrive,TDes& aDriveName) const;
1985 EFSRV_IMPORT_C TInt SetDriveName(TInt aDrive,const TDesC& aDriveName);
1986 EFSRV_IMPORT_C TInt LoaderHeapFunction(TInt aFunction, TAny *aArg1=NULL, TAny *aArg2=NULL);
1987 IMPORT_C TInt SetErrorCondition(TInt anError,TInt aCount=0);
1988 EFSRV_IMPORT_C TInt SetDebugRegister(TInt aVal);
1989 EFSRV_IMPORT_C TInt SetAllocFailure(TInt aAllocNum);
1990 EFSRV_IMPORT_C void DebugNotify(TInt aDrive,TUint aNotifyType,TRequestStatus& aStat);
1991 EFSRV_IMPORT_C TInt ControlIo(TInt aDrive,TInt aCommand);
1992 EFSRV_IMPORT_C TInt ControlIo(TInt aDrive,TInt aCommand,TDes8& aParam1);
1993 EFSRV_IMPORT_C TInt ControlIo(TInt aDrive,TInt aCommand,TDes8& aParam1,TDes8& aParam2);
1994 EFSRV_IMPORT_C TInt ControlIo(TInt aDrive,TInt aCommand,TAny* aParam1,TAny* aParam2);
1995 EFSRV_IMPORT_C TInt LockDrive(TInt aDrv, const TMediaPassword &aOld, const TMediaPassword &aNew, TBool aStr);
1996 EFSRV_IMPORT_C TInt UnlockDrive(TInt aDrv, const TMediaPassword &Pswd, TBool aStr);
1997 EFSRV_IMPORT_C TInt ClearPassword(TInt aDrv, const TMediaPassword &aPswd);
1998 EFSRV_IMPORT_C TInt ErasePassword(TInt aDrv);
1999 EFSRV_IMPORT_C TInt SetSessionToPrivate(TInt aDrive);
2000 EFSRV_IMPORT_C TInt PrivatePath(TDes& aPath);
2001 EFSRV_IMPORT_C TInt CreatePrivatePath(TInt aDrive);
2002 EFSRV_IMPORT_C void StartupInitComplete(TRequestStatus& aStat);
2003 EFSRV_IMPORT_C TInt SetLocalDriveMapping(const TDesC8& aMapping);
2005 EFSRV_IMPORT_C TInt FinaliseDrives();
2007 /** specifies drive finalisation modes */
2008 enum TFinaliseDrvMode
2010 EFinal_RW, ///< after successful finalisation the drive remains writable and will become "not finalised" after the first write operation.
2011 EFinal_RO, ///< after successful finalisation the drive becomes read-only
2012 EForceUnfinalise///< @internalComponent mark the drive as "not finalised" can result in KErrAbort if the dive is in inconsistent state.
2015 EFSRV_IMPORT_C TInt FinaliseDrive(TInt aDriveNo, TFinaliseDrvMode aMode) const;
2017 EFSRV_IMPORT_C TInt SwapFileSystem(const TDesC& aOldFileSystemName,const TDesC& aNewFileSystemName,TInt aDrive) const;
2018 EFSRV_IMPORT_C TInt ReserveDriveSpace(TInt aDriveNo, TInt aSpace);
2019 EFSRV_IMPORT_C TInt GetReserveAccess(TInt aDriveNo);
2020 EFSRV_IMPORT_C TInt ReleaseReserveAccess(TInt aDriveNo);
2022 EFSRV_IMPORT_C TInt AddPlugin(const TDesC& aFileName) const;
2023 EFSRV_IMPORT_C TInt RemovePlugin(const TDesC& aPluginName) const;
2024 EFSRV_IMPORT_C TInt PluginName(TDes& aPluginName,TInt aDrive,TInt aPos);
2026 EFSRV_IMPORT_C TInt MountPlugin(const TDesC& aPluginName) const;
2027 EFSRV_IMPORT_C TInt MountPlugin(const TDesC& aPluginName,TInt aDrive) const;
2028 EFSRV_IMPORT_C TInt MountPlugin(const TDesC& aPluginName,TInt aDrive, TInt aPos) const;
2030 EFSRV_IMPORT_C TInt DismountPlugin(const TDesC& aPluginName) const;
2031 EFSRV_IMPORT_C TInt DismountPlugin(const TDesC& aPluginName,TInt aDrive) const;
2032 EFSRV_IMPORT_C TInt DismountPlugin(const TDesC& aPluginName,TInt aDrive,TInt aPos) const;
2034 EFSRV_IMPORT_C void NotifyDismount(TInt aDrive, TRequestStatus& aStat, TNotifyDismountMode aMode=EFsDismountRegisterClient) const;
2035 EFSRV_IMPORT_C void NotifyDismountCancel(TRequestStatus& aStat) const;
2036 EFSRV_IMPORT_C void NotifyDismountCancel() const;
2037 EFSRV_IMPORT_C TInt AllowDismount(TInt aDrive) const;
2038 EFSRV_IMPORT_C TInt SetStartupConfiguration(TInt aCommand,TAny* aParam1,TAny* aParam2) const;
2039 EFSRV_IMPORT_C TInt AddCompositeMount(const TDesC& aFileSystemName,TInt aLocalDriveToMount,TInt aCompositeDrive, TBool aSync) const;
2040 EFSRV_IMPORT_C TInt SetNotifyChange(TBool aNotifyChange);
2041 EFSRV_IMPORT_C TInt QueryVolumeInfoExt(TInt aDrive, TQueryVolumeInfoExtCmd aCommand, TDes8& aInfo) const;
2042 EFSRV_IMPORT_C TInt VolumeIOParam(TInt aDriveNo, TVolumeIOParamInfo& aParamInfo) const;
2043 EFSRV_IMPORT_C TInt FileSystemSubType(TInt aDriveNo, TDes& aName) const;
2044 EFSRV_IMPORT_C TInt InitialisePropertiesFile(const TPtrC8& aPtr) const;
2046 IMPORT_C TInt AddProxyDrive(const TDesC& aFileName);
2047 IMPORT_C TInt RemoveProxyDrive(const TDesC& aDriveName);
2049 template <class T0,class T1> inline TInt MountProxyDrive(const TUint aDrive, const TDesC& aName, T0 a0, T1 a1)
2050 { return(DoMountProxyDrive(TIpcArgs(aDrive, &aName, a0, a1))); };
2051 IMPORT_C TInt DismountProxyDrive(const TUint aDrive);
2053 TInt Unclamp(const RFileClamp& aHandle);
2055 EFSRV_IMPORT_C TInt ReadFileSection(const TDesC& aName,TInt64 aPos,TDes8& aDes,TInt aLength) const;
2058 This class is used to for returning meaningful error code values to users of RFs::IsValidName(const TDesC& ,TNameValidParam& )
2061 class TNameValidParam
2064 /** Initialises the members of the class. By default iUseSessionPath is set to EFalse, however one could set it to ETrue.*/
2065 inline TNameValidParam(TBool aUseSessionPath = EFalse);
2067 /** possible error codes */
2070 ErrNone, ///< no error.
2071 ErrBadCharacter, ///< aName contains a bad character; and its position is in iInvalidCharPos.
2072 ErrBadName, ///< aName isn't a valid file or directory name.
2073 ErrNameTooLong ///< aName length or aName + session path length (see iUseSessionPath) is longer than 256 characters.
2076 inline TError ErrorCode() const;
2077 inline void UseSessionPath(TBool aUseSessionPath);
2078 inline TUint InvalidCharPos() const;
2079 friend class TFsIsValidName;
2081 TError iError; ///< the reason why aName is invalid, see TError
2082 TBool iUseSessionPath; ///< if ETrue, and if aName isn't fully specified, missing parts will be taken from the session path
2083 TUint iInvalidCharPos; ///< may contain invalid character position if error is ErrBadCharacter,else 0.
2085 EFSRV_IMPORT_C TBool IsValidName(const TDesC& aName, TNameValidParam& aParam );
2087 /** Special enumerator values for the SupportedFileSystemName() API */
2090 KRootFileSystem = 0x00800000, ///< specifies "root" file system. The result will be the same as for FileSystemName() API call
2091 KFirstChildFileSystem = 0 ///< specifies the first child file system number, the second will be KFirstChildFileSystem+1 etc.
2094 EFSRV_IMPORT_C TInt SupportedFileSystemName(TDes& aName, TInt aDrive, TInt aFsEnumerator) const;
2097 TInt SendReceive(TInt aFunction,const TIpcArgs& aArgs) const;
2100 void GetDirL(const TDesC& aMatchName,TUint anEntryAttMask,TUint anEntrySortKey,CDir*& anEntryList,CDir*& aDirList,RDir& aDir) const;
2101 void GetDirL(const TDesC& aMatchName,TUint anEntryAttMask,TUint anEntrySortKey,CDir*& anEntryList,RDir& aDir) const;
2102 void GetDirL(const TDesC& aMatchName,const TUidType& aUidType,TUint anEntrySortKey,CDir*& anEntryList,RDir& aDir) const;
2103 void DoGetDirL(TUint anEntrySortKey,CDir*& anEntryList,RDir& aDir) const;
2104 TInt GetOpenFileList(TInt& aSessionNum,TInt& aLocalPos,TThreadId& aThreadId,TEntryArray& anArray) const;
2106 IMPORT_C TInt DoMountProxyDrive(const TIpcArgs& ipcArgs);
2108 friend class TOpenFileScan;
2109 friend class RFsPlugin;
2113 //-------------------------------------------------------------------------------------------------------------------
2117 Base class for volume formatting parameters. This class package buffer, TVolFormatParamBuf or
2118 packaged buffer of the derived class can be passed to the RFormat::Open() in order to provide
2119 file system-specific formatting parameters.
2120 Each file system that supports such formatting parameters shall have this class specialisation (e.g. TVolFormatParam_FAT)
2121 All classes, derived from this one must have the same size as the base class.
2122 In order to use formatting parameters the format mode shall have ESpecialFormat bit flag set.
2125 @see RFormat::Open(RFs&,const TDesC&,TUint,TInt& ,const TDesC8& anInfo);
2126 @see TVolFormatParamBuf
2131 class TVolFormatParam
2134 inline TVolFormatParam();
2137 inline void SetFileSystemName(const TDesC& aFsName);
2139 static inline TUint32 CalcFSNameHash(const TDesC& aFsName);
2140 inline TUint32 FSNameHash() const;
2142 inline TBool SomeParamsSet() const;
2148 enum {KMaxDataSlots = 64}; ///< the size of data array iData
2150 inline void SetVal(TUint aIndex, TUint32 aVal);
2151 inline TUint32 GetVal(TUint aIndex) const;
2155 enum {KUId = 0x820116A2}; ///< this value shell be in iUid field to identify this class object
2158 This class tree UID. Used to distinguish the object of this class from TLDFormatInfo and other possible data structures.
2159 For this and derived classes this field must be KUId. This field offset in the class must be 0
2164 TUint32 iFSysNameHash; ///< Up-cased file system name hash (crc32) used to designate the file system. 0 means "not set"
2165 TBool iParamsSet : 1; ///< ETrue if any parameter was set (SetVal() called). Gets reset to EFalse by Init()
2166 TUint32 iData[KMaxDataSlots]; ///< used as a pool for various data. The derived classes are free to use it by SetVal()/GetVal()
2169 __ASSERT_COMPILE(_FOFF(TVolFormatParam, iUId) == 0);
2170 __ASSERT_COMPILE(sizeof(TVolFormatParam) != sizeof(TLDFormatInfo));
2173 /** package buffer for the objects of class TVolFormatParamBuf */
2174 typedef TPckgBuf<TVolFormatParam> TVolFormatParamBuf;
2179 #ifndef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
2184 Creates and opens a file, and performs all operations on a single open file.
2188 - reading from and writing to the file
2190 - seeking to a position within the file
2192 - locking and unlocking within the file
2194 - setting file attributes
2196 Before using any of these services, a connection to a file server session must
2197 have been made, and the file must be open.
2201 - use Open() to open an existing file for reading or writing; an error is
2202 returned if it does not already exist.
2203 To open an existing file for reading only, use Open() with an access mode of
2204 EFileRead, and a share mode of EFileShareReadersOnly.
2206 - use Create() to create and open a new file for writing; an error is returned
2207 if it already exists.
2209 - use Replace() to open a file for writing, replacing any existing file of
2210 the same name if one exists, or creating a new file if one does not exist.
2211 Note that if a file exists, its length is reset to zero.
2213 - use Temp() to create and open a temporary file with a unique name,
2214 for writing and reading.
2216 When opening a file, you must specify the file server session to use for
2217 operations with that file. If you do not close the file explicitly, it is
2218 closed when the server session associated with it is closed.
2220 Reading and Writing:
2222 There are several variants of both Read() and Write().
2223 The basic Read(TDes8& aDes) and Write(const TDesC8& aDes) are supplemented
2224 by variants allowing the descriptor length to be overridden, or the seek
2225 position of the first byte to be specified, or asynchronous completion,
2228 Reading transfers data from a file to a descriptor, and writing transfers
2229 data from a descriptor to a file. In all cases, the file data is treated
2230 as binary and byte descriptors are used (TDes8, TDesC8).
2240 Creates and opens a file, and performs all operations on a single open file.
2244 - reading from and writing to the file
2246 - seeking to a position within the file
2248 - locking and unlocking within the file
2250 - setting file attributes
2252 Before using any of these services, a connection to a file server session must
2253 have been made, and the file must be open.
2257 - use Open() to open an existing file for reading or writing; an error is
2258 returned if it does not already exist.
2259 To open an existing file for reading only, use Open() with an access mode of
2260 EFileRead, and a share mode of EFileShareReadersOnly.
2262 - use Create() to create and open a new file for writing; an error is returned
2263 if it already exists.
2265 - use Replace() to open a file for writing, replacing any existing file of
2266 the same name if one exists, or creating a new file if one does not exist.
2267 Note that if a file exists, its length is reset to zero.
2269 - use Temp() to create and open a temporary file with a unique name,
2270 for writing and reading.
2272 When opening a file, you must specify the file server session to use for
2273 operations with that file. If you do not close the file explicitly, it is
2274 closed when the server session associated with it is closed.
2276 Reading and Writing:
2278 There are several variants of both Read() and Write().
2279 The basic Read(TDes8& aDes) and Write(const TDesC8& aDes) are supplemented
2280 by variants allowing the descriptor length to be overridden, or the seek
2281 position of the first byte to be specified, or asynchronous completion,
2284 Reading transfers data from a file to a descriptor, and writing transfers
2285 data from a descriptor to a file. In all cases, the file data is treated
2286 as binary and byte descriptors are used (TDes8, TDesC8).
2288 RFile class supports operations on files of size less than or equal to 2GB - 1.
2289 If the file size is greater than 2GB - 1 (large file), use of class RFile64 is
2290 recommended for following operations:
2291 1. Opening a large file
2292 2. Creating a file which can grow beyond 2GB - 1 by size
2293 3. Creating a temporary file which can grow beyond 2GB - 1 by size
2294 4. Replacing an existing file after which it can grow beyond 2GB - 1 by size
2295 5. Adopting a large file handle from client
2296 6. Adopting a large file handle from server
2297 7. Adopting a large file handle from another process
2298 8. Read from a position greater than 2GB - 1
2299 9. Writing to a file by which the size can grow beyond 2GB - 1
2300 10. Seek to a position greater than 2GB - 1
2301 11. Setting a size greater than 2GB - 1
2302 12. Querying the file size (greater than 2GB - 1)
2303 13. Locking and unlocking a position and length that is beyond 2GB - 1
2315 class RFile : public RSubSessionBase
2318 EFSRV_IMPORT_C TInt Open(RFs& aFs,const TDesC& aName,TUint aFileMode);
2319 EFSRV_IMPORT_C void Close();
2320 EFSRV_IMPORT_C TInt Create(RFs& aFs,const TDesC& aName,TUint aFileMode);
2321 EFSRV_IMPORT_C TInt Replace(RFs& aFs,const TDesC& aName,TUint aFileMode);
2322 EFSRV_IMPORT_C TInt Temp(RFs& aFs,const TDesC& aPath,TFileName& aName,TUint aFileMode);
2323 EFSRV_IMPORT_C TInt Read(TDes8& aDes) const;
2324 EFSRV_IMPORT_C void Read(TDes8& aDes,TRequestStatus& aStatus) const;
2325 EFSRV_IMPORT_C TInt Read(TDes8& aDes,TInt aLength) const;
2326 EFSRV_IMPORT_C void Read(TDes8& aDes,TInt aLength,TRequestStatus& aStatus) const;
2327 EFSRV_IMPORT_C TInt Read(TInt aPos,TDes8& aDes) const;
2328 EFSRV_IMPORT_C void Read(TInt aPos,TDes8& aDes,TRequestStatus& aStatus) const;
2329 EFSRV_IMPORT_C TInt Read(TInt aPos,TDes8& aDes,TInt aLength) const;
2330 EFSRV_IMPORT_C void Read(TInt aPos,TDes8& aDes,TInt aLength,TRequestStatus& aStatus) const;
2331 EFSRV_IMPORT_C void ReadCancel(TRequestStatus& aStatus) const;
2332 EFSRV_IMPORT_C void ReadCancel() const;
2333 EFSRV_IMPORT_C TInt Write(const TDesC8& aDes);
2334 EFSRV_IMPORT_C void Write(const TDesC8& aDes,TRequestStatus& aStatus);
2335 EFSRV_IMPORT_C TInt Write(const TDesC8& aDes,TInt aLength);
2336 EFSRV_IMPORT_C void Write(const TDesC8& aDes,TInt aLength,TRequestStatus& aStatus);
2337 EFSRV_IMPORT_C TInt Write(TInt aPos,const TDesC8& aDes);
2338 EFSRV_IMPORT_C void Write(TInt aPos,const TDesC8& aDes,TRequestStatus& aStatus);
2339 EFSRV_IMPORT_C TInt Write(TInt aPos,const TDesC8& aDes,TInt aLength);
2340 EFSRV_IMPORT_C void Write(TInt aPos,const TDesC8& aDes,TInt aLength,TRequestStatus& aStatus);
2341 EFSRV_IMPORT_C TInt Lock(TInt aPos,TInt aLength) const;
2342 EFSRV_IMPORT_C TInt UnLock(TInt aPos,TInt aLength) const;
2343 EFSRV_IMPORT_C TInt Seek(TSeek aMode,TInt& aPos) const;
2344 EFSRV_IMPORT_C TInt Flush();
2345 EFSRV_IMPORT_C void Flush(TRequestStatus& aStatus);
2346 EFSRV_IMPORT_C TInt Size(TInt& aSize) const;
2347 EFSRV_IMPORT_C TInt SetSize(TInt aSize);
2348 EFSRV_IMPORT_C TInt Att(TUint& aAttValue) const;
2349 EFSRV_IMPORT_C TInt SetAtt(TUint aSetAttMask,TUint aClearAttMask);
2350 EFSRV_IMPORT_C TInt Modified(TTime& aTime) const;
2351 EFSRV_IMPORT_C TInt SetModified(const TTime& aTime);
2352 EFSRV_IMPORT_C TInt Set(const TTime& aTime,TUint aSetAttMask,TUint aClearAttMask);
2353 EFSRV_IMPORT_C TInt ChangeMode(TFileMode aNewMode);
2354 EFSRV_IMPORT_C TInt Rename(const TDesC& aNewName);
2355 EFSRV_IMPORT_C TInt Drive(TInt &aDriveNumber, TDriveInfo &aDriveInfo) const;
2356 EFSRV_IMPORT_C TInt Adopt(RFs& aFs, TInt aHandle);
2357 EFSRV_IMPORT_C TInt AdoptFromClient(const RMessage2& aMsg, TInt aFsHandleIndex, TInt aFileHandleIndex);
2358 EFSRV_IMPORT_C TInt AdoptFromServer(TInt aFsHandle, TInt aFileHandle);
2359 EFSRV_IMPORT_C TInt AdoptFromCreator(TInt aFsIndex, TInt aFileHandleIndex);
2360 EFSRV_IMPORT_C TInt Name(TDes& aName) const;
2361 EFSRV_IMPORT_C TInt TransferToServer(TIpcArgs& aIpcArgs, TInt aFsHandleIndex, TInt aFileHandleIndex) const;
2362 EFSRV_IMPORT_C TInt TransferToClient(const RMessage2& aMsg, TInt aFileHandleIndex) const;
2363 EFSRV_IMPORT_C TInt TransferToProcess(RProcess& aProcess, TInt aFsHandleIndex, TInt aFileHandleIndex) const;
2364 EFSRV_IMPORT_C TInt Duplicate(const RFile& aFile, TOwnerType aType=EOwnerProcess);
2365 EFSRV_IMPORT_C TInt FullName(TDes& aName) const;
2366 EFSRV_IMPORT_C TInt BlockMap(SBlockMapInfo& aInfo, TInt64& aStartPos, TInt64 aEndPos=-1, TInt aBlockMapusage=EBlockMapUsagePaging) const;
2367 TInt Clamp(RFileClamp& aHandle);
2370 // RSubSessionBase overrides
2371 TInt CreateSubSession(const RSessionBase& aSession,TInt aFunction,const TIpcArgs& aArgs);
2372 void CloseSubSession(TInt aFunction);
2373 TInt SendReceive(TInt aFunction,const TIpcArgs& aArgs) const;
2375 TInt DuplicateHandle(TInt& aSubSessionHandle) const;
2377 friend class RFilePlugin;
2380 #ifdef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
2381 #include <f32file64.h>
2384 class RDir : public RSubSessionBase
2389 Reads the entries contained in a directory.
2391 You must first open the directory, specifying an attribute mask which is used
2392 by Read() calls to filter the entry types required. Then, use one of
2393 the Read() functions to read the filtered entries. When the operation
2394 is complete, the directory should be closed using Close()
2396 There are two types of Read(): one works with a single entry at a time,
2397 requiring programs to iterate through the entries explicitly.
2398 The other works with an entire TEntryArray, allowing multiple entries to be
2400 As well as making application program logic somewhat simpler, this type
2401 uses fewer calls to the server, and is more efficient.
2403 Each type of Read() can be performed either synchronously or asynchronously.
2405 It may be more convenient to use RFs::GetDir() than the Read() calls supported
2407 RFs::GetDir() has the advantage that it allows a directory’s entries to be
2408 sorted in various ways.
2409 However, it does not provide asynchronous as well as synchronous variants
2410 and does not allow entries to be read individually.
2416 EFSRV_IMPORT_C TInt Open(RFs& aFs,const TDesC& aMatchName,const TUidType& aUidType);
2417 EFSRV_IMPORT_C TInt Open(RFs& aFs,const TDesC& aMatchName,TUint anAttMask);
2418 EFSRV_IMPORT_C void Close();
2419 EFSRV_IMPORT_C TInt Read(TEntryArray& anArray) const;
2420 EFSRV_IMPORT_C void Read(TEntryArray& anArray,TRequestStatus& aStatus) const;
2421 EFSRV_IMPORT_C TInt Read(TEntry& anEntry) const;
2422 EFSRV_IMPORT_C void Read(TPckg<TEntry>& anEntry,TRequestStatus& aStatus) const;
2425 // RSubSessionBase overrides
2426 TInt SendReceive(TInt aFunction,const TIpcArgs& aArgs) const;
2428 friend class RDirPlugin;
2432 class RFormat : public RSubSessionBase
2437 Formats a device, one step at a time.
2439 RFormat must first be opened on a device before formatting each
2442 There is also an asynchronous version of Next() which, if encapsulated into
2443 a suitable active object, can be used to implement a
2444 user-interruptible formatting process.
2448 IMPORT_C TInt Open(RFs& aFs,const TDesC& aName,TUint aFormatMode,TInt& aCount);
2449 IMPORT_C TInt Open(RFs& aFs,const TDesC& aName,TUint aFormatMode,TInt& aCount,const TDesC8& anInfo);
2450 IMPORT_C void Close();
2451 IMPORT_C TInt Next(TInt& aStep);
2452 IMPORT_C void Next(TPckgBuf<TInt>& aStep,TRequestStatus& aStatus);
2458 class RRawDisk : public RSubSessionBase
2463 Enables direct disk access.
2465 No other resources can access the disk while direct access to it is in effect.
2467 This class is not intended for user derivation.
2471 IMPORT_C TInt Open(RFs& aFs,TInt aDrive);
2472 IMPORT_C void Close();
2473 IMPORT_C TInt Read(TInt64 aPos,TDes8& aDes);
2474 IMPORT_C TInt Write(TInt64 aPos,TDesC8& aDes);
2483 NONSHARABLE_CLASS(CDirScan) : public CBase
2488 Scans a directory structure.
2490 The scan moves from directory to directory through the hierarchy, returning
2491 a list of the entries contained in each. The order in which the directories
2492 are scanned is determined by a sort key which is specified when setting up
2493 the scan. The base directory to be scanned and the entry types of interest
2494 must also be specified before performing the scan.
2496 This class is not intended for user derivation
2501 Defines the scan direction.
2506 Scan upwards from the lowest level directory in the hierarchy to
2507 the top level directory.
2512 Scan downwards from the top level directory in the hierarchy to
2513 the bottom level directory.
2518 IMPORT_C static CDirScan* NewL(RFs& aFs);
2519 IMPORT_C static CDirScan* NewLC(RFs& aFs);
2520 IMPORT_C ~CDirScan();
2521 IMPORT_C void SetScanDataL(const TDesC& aMatchName,TUint anEntryAttMask,TUint anEntrySortMask,TScanDirection aScanDir=EScanDownTree);
2522 IMPORT_C void NextL(CDir*& aDirEntries);
2523 IMPORT_C TPtrC AbbreviatedPath();
2524 IMPORT_C TPtrC FullPath();
2529 void UpdateAbbreviatedPath();
2530 void ScanUpTreeL(CDir*& aDirEntries);
2531 void ScanDownTreeL(CDir*& aDirEntries);
2532 void GetDirEntriesL(CDir*& aDirEntries);
2536 TPtrC iAbbreviatedPath;
2537 TInt iAbbreviatedPathPos;
2538 TUint iEntryAttMask;
2539 TUint iEntrySortMask;
2541 TScanDirection iScanDir;
2553 A list of CFileMan error codes.
2559 No additional error information is available, either because
2560 the latest CFileMan operation did not return an error, or if it did,
2561 the error was not one for which additional information is available.
2563 ENoExtraInformation,
2567 A leave occurred while setting up the initial scan.
2569 This indicates that the operation did not begin.
2573 EInitializationFailed,
2577 A leave occurred while scanning the next directory in the course of a file
2578 management function.
2580 This indicates that the operation did begin.
2584 EScanNextDirectoryFailed,
2588 Error occurred when attempting to open the source file for a file copy
2595 Error occurred while attempting to create, or, if overwriting is in effect,
2596 replace the target file for a file copy or move.
2602 The operation completed without processing any files because no matching
2611 class MFileManObserver
2616 Provides notification of the progress of synchronous or asynchronous
2617 file management operations.
2619 It should be inherited by classes which implement this protocol.
2621 The enquiry functions provided by CFileBase and CFileMan may be used by
2622 the observer to display information about the progress of the operation
2623 such as error messages, the names of the target and destination files,
2624 and the number of bytes transferred during a copy operation.
2625 Notification may take place before or after an entry has been processed,
2626 or during a file copy or move.
2627 Each notification function returns a value which can be used to enable
2628 the user to control the progress of the operation, for example to cancel
2629 a long-running multiple file copy.
2630 To use this class, pass a pointer to an instance of the class to
2631 the CFileMan constructor, or use SetObserver(), defined in CFileBase.
2636 Control for the current CFileMan operation.
2641 Proceed with the current or the next entry.
2647 Retry processing the previous entry.
2653 Abort operation, causes function to return KErrCancel.
2659 Cancel processing the current entry.
2664 IMPORT_C virtual TControl NotifyFileManStarted();
2665 IMPORT_C virtual TControl NotifyFileManOperation();
2666 IMPORT_C virtual TControl NotifyFileManEnded();
2672 class CFileBase : public CBase
2677 Abstract base class for file management.
2679 It provides functions to set an observer for the derived class
2680 CFileMan, and to get information about the entry being processed.
2686 IMPORT_C void SetObserver(MFileManObserver* anObserver);
2688 IMPORT_C const TEntry& CurrentEntry();
2689 IMPORT_C TPtrC AbbreviatedPath();
2690 IMPORT_C TPtrC FullPath();
2691 IMPORT_C TInt GetLastError();
2692 IMPORT_C TFileManError GetMoreInfoAboutError();
2694 IMPORT_C CFileBase(RFs& anFs);
2695 IMPORT_C void ConstructL();
2696 IMPORT_C ~CFileBase();
2697 IMPORT_C void RunL();
2698 IMPORT_C void RunInSeparateThreadL(TThreadFunction aThreadFunction);
2701 Called from RunL to perform tidy up after an operation.
2704 @see CFileBase::RunL
2706 virtual void CompleteOperationL() {};
2710 Called from RunL to perform the requested operation.
2713 @see CFileBase::RunL
2715 virtual void DoOperationL() = 0;
2719 RThread iFManThread;
2720 RSemaphore iSynchronizer;
2727 MFileManObserver* iObserver;
2729 TFileManError iErrorInfo;
2730 TRequestStatus* iStatus;
2731 HBufC* iSessionPath;
2732 TInt iNumberOfFilesProcessed;
2737 friend void DoFManBaseOperationL(TAny* aPtr);
2738 friend TInt FManBaseThreadFunction(TAny* aPtr);
2744 NONSHARABLE_CLASS(CFileMan) : public CFileBase
2749 Offers file management services which accept the use of wildcards;
2750 synchronous and asynchronous.
2752 It also provides enquiry functions, which, like those provided by
2753 the base class CFileBase, may be used by an observer class object
2754 to provide the user with information about the progress of the operation.
2756 All of the file management functions provided by this class accept the use of
2757 wildcards, and may operate either synchronously or asynchronously.
2758 When CFileMan is operating asynchronously, the operation takes place in
2759 a separate thread from the calling code.
2761 A file notification observer (an instance of a class deriving
2762 from MFileManObserver) may optionally be used by CFileMan when operating
2763 synchronously or asynchronously. If provided, the appropriate notification
2764 function is called before or after each entry has been processed,
2765 or during a file copy or move.
2766 This notification can be used to provide information about the state of
2767 the operation, such as the number of bytes transferred during a
2768 large-scale file copy. It can also be used to allow the user to cancel,
2769 retry or continue processing an entry, or to abort the whole operation.
2770 If such notification is required, specify an object deriving from
2771 MFileManObserver class in the constructor, or call SetObserver(),
2772 defined in the base class, CFileBase.
2774 All of the file manipulation functions except Rename() may operate recursively,
2775 and all can operate non-recursively. When operating recursively,
2776 these functions will act on all matching files located throughout
2777 the source directory’s hierarchy. When operating non-recursively,
2778 these functions act upon files contained in the single top level source
2779 directory only. Recursion is set or unset using the switch parameter to
2782 This class is not intended for user derivation.
2786 To support wildcard, CFileMan needs to store the entire directory entry
2787 information. Therefore, in a extreme condition, if a directory contains
2788 a huge number of files (e.g. more than 15000 files with 10 characters' long file
2789 names), user may encounter KErrNoMemory errors. Developers who have a need to handle
2790 this rare case should increase the heap size limitation of their applications.
2792 For more information about heap size configuration, please refer following
2793 section in Symbian Developer Library:
2794 Symbian OS build guide >> Build Tools Reference >> MMP file syntax >> epocheapsize
2796 @see MFileManObserver
2801 An enumeration that identifies CFileMan tasks. This enumeration is used
2802 by CurrentAction() to identify which task currently being carried out.
2804 @see CFileMan::CurrentAction
2845 Deleting a directory and all contents
2851 Renaming component to VFAT short name (guaranteed to be unique)
2853 ERenameInvalidEntry,
2856 Copying file from open file handle
2863 Overwriting and recursion switch.
2865 Used in CFileMan functions to set whether operations are applied to
2866 the specified directory and all directories below it, or
2867 the specified directory only.
2872 Any files in the destination directory that have the same name as
2873 the source files in a rename, move or copy operation, will
2880 Recursive operation.
2885 IMPORT_C static CFileMan* NewL(RFs& aFs);
2886 IMPORT_C static CFileMan* NewL(RFs& aFs,MFileManObserver* anObserver);
2888 IMPORT_C TAction CurrentAction();
2889 IMPORT_C void GetCurrentTarget(TFileName& aFile);
2890 IMPORT_C void GetCurrentSource(TFileName& aFile);
2891 IMPORT_C TInt BytesTransferredByCopyStep();
2893 IMPORT_C TInt Attribs(const TDesC& aName,TUint aSetMask,TUint aClearMask,const TTime& aTime,TUint aSwitch=0);
2894 IMPORT_C TInt Attribs(const TDesC& aName,TUint aSetMask,TUint aClearMask,const TTime& aTime,TUint aSwitch,TRequestStatus& aStatus);
2895 IMPORT_C TInt Copy(const TDesC& anOld,const TDesC& aNew,TUint aSwitch=EOverWrite);
2896 IMPORT_C TInt Copy(const TDesC& anOld,const TDesC& aNew,TUint aSwitch,TRequestStatus& aStatus);
2897 IMPORT_C TInt Delete(const TDesC& aName,TUint aSwitch=0);
2898 IMPORT_C TInt Delete(const TDesC& aName,TUint aSwitch,TRequestStatus& aStatus);
2899 IMPORT_C TInt Move(const TDesC& anOld,const TDesC& aNew,TUint aSwitch=EOverWrite);
2900 IMPORT_C TInt Move(const TDesC& anOld,const TDesC& aNew,TUint aSwitch,TRequestStatus& aStatus);
2901 IMPORT_C TInt Rename(const TDesC& anOld,const TDesC& aNew,TUint aSwitch=EOverWrite);
2902 IMPORT_C TInt Rename(const TDesC& anOld,const TDesC& aNew,TUint aSwitch,TRequestStatus& aStatus);
2903 IMPORT_C TInt RmDir(const TDesC& aDirName);
2904 IMPORT_C TInt RmDir(const TDesC& aDirName,TRequestStatus& aStatus);
2905 IMPORT_C TInt Copy(const RFile& anOld,const TDesC& aNew,TUint aSwitches=EOverWrite);
2906 IMPORT_C TInt Copy(const RFile& anOld,const TDesC& aNew,TUint aSwitches,TRequestStatus& aStatus);
2909 TInt RenameInvalidEntry(const TDesC& anOld,const TDesC& aNew,TUint aSwitch=EOverWrite);
2912 This is an internal enumeration for CFileMan implementation.
2913 THis enumeration is mapped into TAction when user wants to identify the current
2914 task of CFileMan by CurrentAction().
2916 @see CFileMan::TAction
2917 @see CFileMan::CurrentAction
2919 enum TInternalAction
2922 Internal indicator for None operation.
2923 This is mapped to CFileMan::ENone.
2928 Internal indicator for Attribs() operation.
2929 This is mapped to CFileMan::EAttribs.
2934 Internal indicator for Copy() operation.
2935 This is mapped to CFileMan::ECopy.
2940 Internal indicator for Delete() operation.
2941 This is mapped to CFileMan::EDelete.
2946 Internal indicator for Move() operation on different drives.
2947 This is mapped to CFileMan::Move.
2949 EInternalCopyForMove,
2952 Internal indicator for Move() operation on the same drive.
2953 This is mapped to CFileMan::Rename.
2954 Note for compatibility reasons, it is not mapped to CFileMan::Move.
2956 EInternalRenameForMove,
2959 Internal indicator for Rename() operation.
2960 This is mapped to CFileMan::ERename.
2965 Internal indicator for RmDir() operation.
2966 This is mapped to CFileMan::ERmDir.
2971 Internal indicator for RenameInvalidEntry() operation.
2972 This is mapped to CFileMan::ERenameInvalidEntry.
2974 EInternalRenameInvalidEntry,
2977 Internal indicator for CopyFromHandle() operation.
2978 This is mapped to CFileMan::ECopyFromHandle.
2980 EInternalCopyFromHandle,
2983 void CompleteOperationL();
2984 void DoOperationL();
2985 void CheckForDirectory();
2986 void SetFlags(TBool aOverWrite,TBool aRecurse,TBool aScanDirection,TBool aMoveRename);
2987 void GetSrcAndTrg(TParse& aSrcName,TFileName& aTrgName);
2988 void DoSynchronize(TInt aRetVal);
2989 TInt CheckRenameAllowed(const TDesC& aSrcName,const TDesC& aTrgName);
2990 TInt SetupMoveOnSameDrive(TUint aSwitches, TBool& aComplete);
2991 TInt SetupMoveAcrossDrives(TUint aSwitches);
2992 TInt SetupTargetDirectory(TBool aOverWrite, TBool& aComplete);
2993 TBool SrcTrgDrivesIdentical();
2994 TInt SetupDirectoryForMove(TBool& aSrcIsDir);
2997 void DoCopyOrMoveL();
3001 void DoCopyFromHandleL();
3002 #ifndef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
3003 TInt DoCopy(const RFile& aSrcFile, RFile& aDstFile, TInt& aRet);
3005 TInt DoCopy(const RFile64& aSrcFile, RFile64& aDstFile, TInt& aRet);
3009 TInternalAction iAction;
3013 TInt iBytesTransferred;
3014 #ifndef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
3015 RFile iSrcFileHandle;
3017 RFile64 iSrcFileHandle;
3019 TBool iMovingContents;
3022 TFileName iTmpName1;
3023 TFileName iTmpName2;
3025 friend void RenameInvalidEntryL(RFs& aFs,TParse& aSrcFile);
3036 Searches for files and directories.
3038 Each function has a variant which searches for multiple files/directories,
3039 using one or more wildcard characters in the filename.
3040 If an initial search is successful, further searches can be carried out
3041 using Find() or FindWild().
3042 You can also retrieve the fully qualified file specification,
3043 and manipulate and interrogate it using the TParse class (or related classes).
3045 Note that when specifying the path of a directory to search, the path should
3046 always end with a backslash character.When trailing backslash is not present
3047 then it is considered as file. And path will be taken till last backslash.
3048 The client must have appropriate capabilities for the directory to be searched.
3049 For example without ALL FILES Capability, it is not possible to successfully
3050 find any files under \sys\bin directory.
3052 By default if the file is not found in the current drive the rest of the drives,
3053 excluding the remote ones, will be searched. Using function SetFindMask it is
3054 possible to specify a combination of drive attributes(aMask) that the drives to
3055 be searched must match.
3060 IMPORT_C TFindFile(RFs& aFs);
3061 IMPORT_C TInt FindByPath(const TDesC& aFileName,const TDesC* aPathList);
3062 IMPORT_C TInt FindByDir(const TDesC& aFileName,const TDesC& aDirPath);
3063 IMPORT_C TInt Find();
3064 IMPORT_C TInt FindWildByPath(const TDesC& aFileName,const TDesC* aPathList,CDir*& aDirList);
3065 IMPORT_C TInt FindWildByDir(const TDesC& aFileName,const TDesC& aDirPath,CDir*& aDir);
3066 IMPORT_C TInt FindWild(CDir*& aDirList);
3067 IMPORT_C TInt SetFindMask(TUint aMask);
3068 inline const TDesC& File() const;
3071 TInt DoFindByPath(const TDesC& aFileName,const TDesC* aPathList);
3072 TInt DoFindByDir(const TDesC& aFileName,const TDesC& aDir);
3074 TInt DoFindNextInPath();
3075 TInt DoFindNextInDriveList();
3083 TDriveList iDrvList;
3095 Contains a list of entries for the files which were opened in
3096 a file server session.
3100 typedef CDir CFileList;
3110 Scans open files to get a list of the entries for all files which are currently
3111 open in a particular file server session.
3113 NextL() creates a list of the files opened by the session.
3114 The ID of the thread which opened the files listed may be obtained by calling ThreadId().
3115 If multiple sessions are in use, repeatedly calling NextL() will return a list
3116 of open files in each session.
3120 IMPORT_C TOpenFileScan(RFs& aFs);
3121 IMPORT_C void NextL(CFileList*& aFileList);
3122 IMPORT_C TThreadId ThreadId() const;
3125 TThreadId iThreadId;
3138 Reads and writes single lines of text to or from a Unicode file.
3149 IMPORT_C TFileText();
3150 IMPORT_C void Set(RFile& aFile);
3151 IMPORT_C TInt Read(TDes& aDes);
3152 IMPORT_C TInt Write(const TDesC& aDes);
3153 IMPORT_C TInt Seek(TSeek aMode);
3156 TInt CheckForTerminator(TBool& anAnswer);
3162 #ifndef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
3167 TBuf8<0x100> iReadBuf;
3177 IMPORT_C TBool FileNamesIdentical(const TDesC& aFileName1,const TDesC& aFileName2);
3183 The UID of the File Server process
3185 const TInt KFileServerUidValue = 0x100039e3;
3188 #include <f32file.inl>
3189 #ifdef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
3190 #include <f32file64.inl>
3193 #ifdef SYMBIAN_F32_ENHANCED_CHANGE_NOTIFICATION
3194 #include <f32notification.h>
3197 #ifndef SYMBIAN_ENABLE_SPLIT_HEADERS
3198 #include <f32file_private.h>