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
1833 // forward declarations from e32ldr_private.h
1836 class RFs : public RSessionBase
1841 A handle to a file server session.
1843 A program or thread may have arbitrarily many sessions open simultaneously.
1845 Use this class for all file system manipulation, including:
1847 1. adding, removing, moving and renaming files and directories
1849 2. inspecting and changing file attributes and directory entry details.
1850 These include the time and date when the file or directory was last
1851 written to, its size and various attribute flags such as read-only,
1852 hidden, archive or system.
1854 3. finding a file’s real name; if the file system on which it is stored
1855 has to "mangle" the name into a shorter format
1857 4. getting directory listings
1859 5. maintaining a default path; unlike some other systems, there is a single
1860 system default path, rather than one for each drive: the default path
1861 consists of a drive and a path specification.
1863 6. performing context-sensitive parses using TParse objects, and
1866 7. obtaining information on drives and volumes
1868 8. formatting and labelling volumes
1870 9. obtaining a list of valid drives
1872 10. emulating the DOS subst command, which allows any directory to appear
1873 as if it were a separate drive
1875 11. requesting notification of when significant change occurs.
1876 This can be used for programs which maintain file lists, but must
1877 update those lists when change occurs.
1879 12. finding the version number of the file server
1881 13. resource counting to ensure that all resources are closed when
1882 the session terminates.
1884 This class is not intended for user derivation.
1886 The following restrictions apply when a path is specified:
1888 1. its total length must not exceed 256 characters
1890 2. wildcards cannot be used in the drive or in any directory name,
1891 although they may be allowed in the filename and extension.
1893 3. double backslashes are not allowed in the path.
1895 4. the following characters must not be included anywhere in the path: < > " / |
1897 5. a colon may only be included between the drive and path
1899 6. no directory name or filename plus extension may consist solely
1900 of space characters, or of a single or double dot.
1902 7. spaces between the drive, if specified, and the first directory in
1903 the path are illegal, although there may be spaces between other
1904 path components, for instance between directories.
1908 EFSRV_IMPORT_C TInt Connect(TInt aMessageSlots=KFileServerDefaultMessageSlots);
1909 EFSRV_IMPORT_C void Close();
1910 EFSRV_IMPORT_C TVersion Version() const;
1911 EFSRV_IMPORT_C TInt AddFileSystem(const TDesC& aFileName) const;
1912 EFSRV_IMPORT_C TInt MountFileSystem(const TDesC& aFileSystemName,TInt aDrive) const;
1913 EFSRV_IMPORT_C TInt MountFileSystem(const TDesC& aFileSystemName,TInt aDrive, TBool aIsSync) const;
1914 EFSRV_IMPORT_C TInt MountFileSystemAndScan(const TDesC& aFileSystemName,TInt aDrive,TBool& aIsMountSuccess) const;
1915 EFSRV_IMPORT_C TInt MountFileSystem(const TDesC& aFileSystemName,const TDesC& aExtensionName,TInt aDrive);
1916 EFSRV_IMPORT_C TInt MountFileSystem(const TDesC& aFileSystemName,const TDesC& aExtensionName,TInt aDrive, TBool aIsSync);
1917 EFSRV_IMPORT_C TInt MountFileSystemAndScan(const TDesC& aFileSystemName,const TDesC& aExtensionName,TInt aDrive,TBool& aIsMountSuccess) const;
1918 EFSRV_IMPORT_C TInt DismountFileSystem(const TDesC& aFileSystemName,TInt aDrive) const;
1919 EFSRV_IMPORT_C TInt RemoveFileSystem(const TDesC& aFileSystemName) const;
1920 EFSRV_IMPORT_C TInt FileSystemName(TDes& aName,TInt aDrive) const;
1921 EFSRV_IMPORT_C TInt AddExtension(const TDesC& aFileName);
1922 EFSRV_IMPORT_C TInt MountExtension(const TDesC& aExtensionName,TInt aDrive);
1923 EFSRV_IMPORT_C TInt DismountExtension(const TDesC& aExtensionName,TInt aDrive);
1924 EFSRV_IMPORT_C TInt RemoveExtension(const TDesC& aExtensionName);
1925 EFSRV_IMPORT_C TInt ExtensionName(TDes& aExtensionName,TInt aDrive,TInt aPos);
1926 EFSRV_IMPORT_C TInt RemountDrive(TInt aDrive,const TDesC8* aMountInfo=NULL,TUint aFlags=0);
1927 EFSRV_IMPORT_C void NotifyChange(TNotifyType aType,TRequestStatus& aStat);
1928 EFSRV_IMPORT_C void NotifyChange(TNotifyType aType,TRequestStatus& aStat,const TDesC& aPathName);
1929 EFSRV_IMPORT_C void NotifyChangeCancel();
1930 EFSRV_IMPORT_C void NotifyChangeCancel(TRequestStatus& aStat);
1931 EFSRV_IMPORT_C void NotifyDiskSpace(TInt64 aThreshold,TInt aDrive,TRequestStatus& aStat);
1932 EFSRV_IMPORT_C void NotifyDiskSpaceCancel(TRequestStatus& aStat);
1933 EFSRV_IMPORT_C void NotifyDiskSpaceCancel();
1934 EFSRV_IMPORT_C TInt DriveList(TDriveList& aList) const;
1935 EFSRV_IMPORT_C TInt DriveList(TDriveList& aList, TUint aFlags) const;
1936 EFSRV_IMPORT_C TInt Drive(TDriveInfo& anInfo,TInt aDrive=KDefaultDrive) const;
1937 EFSRV_IMPORT_C TInt Volume(TVolumeInfo& aVol,TInt aDrive=KDefaultDrive) const;
1938 EFSRV_IMPORT_C void Volume(TVolumeInfo& aVol,TInt aDrive, TRequestStatus& aStat) const;
1939 EFSRV_IMPORT_C TInt SetVolumeLabel(const TDesC& aName,TInt aDrive=KDefaultDrive);
1940 EFSRV_IMPORT_C TInt Subst(TDes& aPath,TInt aDrive=KDefaultDrive) const;
1941 EFSRV_IMPORT_C TInt SetSubst(const TDesC& aPath,TInt aDrive=KDefaultDrive);
1942 EFSRV_IMPORT_C TInt RealName(const TDesC& aName,TDes& aResult) const;
1943 EFSRV_IMPORT_C TInt GetMediaSerialNumber(TMediaSerialNumber& aSerialNum, TInt aDrive);
1944 EFSRV_IMPORT_C TInt SessionPath(TDes& aPath) const;
1945 EFSRV_IMPORT_C TInt SetSessionPath(const TDesC& aPath);
1946 EFSRV_IMPORT_C TInt Parse(const TDesC& aName,TParse& aParse) const;
1947 EFSRV_IMPORT_C TInt Parse(const TDesC& aName,const TDesC& aRelated,TParse& aParse) const;
1948 EFSRV_IMPORT_C TInt MkDir(const TDesC& aPath);
1949 EFSRV_IMPORT_C TInt MkDirAll(const TDesC& aPath);
1950 EFSRV_IMPORT_C TInt RmDir(const TDesC& aPath);
1951 EFSRV_IMPORT_C TInt GetDir(const TDesC& aName,TUint anEntryAttMask,TUint anEntrySortKey,CDir*& anEntryList) const;
1952 EFSRV_IMPORT_C TInt GetDir(const TDesC& aName,TUint anEntryAttMask,TUint anEntrySortKey,CDir*& anEntryList,CDir*& aDirList) const;
1953 EFSRV_IMPORT_C TInt GetDir(const TDesC& aName,const TUidType& anEntryUid,TUint anEntrySortKey,CDir*& aFileList) const;
1954 EFSRV_IMPORT_C TInt Delete(const TDesC& aName);
1955 EFSRV_IMPORT_C TInt Rename(const TDesC& anOldName,const TDesC& aNewName);
1956 EFSRV_IMPORT_C TInt Replace(const TDesC& anOldName,const TDesC& aNewName);
1957 EFSRV_IMPORT_C TInt Att(const TDesC& aName,TUint& aAttValue) const;
1958 EFSRV_IMPORT_C TInt SetAtt(const TDesC& aName,TUint aSetAttMask,TUint aClearAttMask);
1959 EFSRV_IMPORT_C TInt Modified(const TDesC& aName,TTime& aTime) const;
1960 EFSRV_IMPORT_C TInt SetModified(const TDesC& aName,const TTime& aTime);
1961 EFSRV_IMPORT_C TInt Entry(const TDesC& aName,TEntry& anEntry) const;
1962 EFSRV_IMPORT_C TInt SetEntry(const TDesC& aName,const TTime& aTime,TUint aSetAttMask,TUint aClearAttMask);
1964 EFSRV_IMPORT_C TInt ReadFileSection_RESERVED(const TDesC& aName,TInt aPos,TDes8& aDes,TInt aLength) const;
1966 EFSRV_IMPORT_C static TBool IsValidDrive(TInt aDrive);
1967 EFSRV_IMPORT_C static TInt CharToDrive(TChar aChar,TInt& aDrive);
1968 EFSRV_IMPORT_C static TInt DriveToChar(TInt aDrive,TChar& aChar);
1969 EFSRV_IMPORT_C static TBool IsRomAddress(TAny* aAny);
1970 EFSRV_IMPORT_C static TDriveNumber GetSystemDrive();
1971 EFSRV_IMPORT_C static TChar GetSystemDriveChar();
1972 EFSRV_IMPORT_C TInt SetSystemDrive(TDriveNumber aSystemDrive);
1973 EFSRV_IMPORT_C void ResourceCountMarkStart() const;
1974 EFSRV_IMPORT_C void ResourceCountMarkEnd() const;
1975 EFSRV_IMPORT_C TInt ResourceCount() const;
1976 EFSRV_IMPORT_C TInt IsFileOpen(const TDesC& aFile,TBool& anAnswer) const;
1977 EFSRV_IMPORT_C TInt CheckDisk(const TDesC& aDrive) const;
1978 EFSRV_IMPORT_C TInt ScanDrive(const TDesC& aDrive) const;
1979 EFSRV_IMPORT_C TInt GetShortName(const TDesC& aLongName,TDes& aShortName) const;
1980 EFSRV_IMPORT_C TInt GetLongName(const TDesC& aShortName,TDes& aLongName) const;
1981 EFSRV_IMPORT_C TBool GetNotifyUser();
1982 EFSRV_IMPORT_C void SetNotifyUser(TBool aValue);
1983 EFSRV_IMPORT_C TUint8* IsFileInRom(const TDesC& aFileName) const;
1984 EFSRV_IMPORT_C TBool IsValidName(const TDesC& anEntryName) const;
1985 EFSRV_IMPORT_C TBool IsValidName(const TDesC& aFileName,TText& aBadChar) const;
1986 EFSRV_IMPORT_C TInt GetDriveName(TInt aDrive,TDes& aDriveName) const;
1987 EFSRV_IMPORT_C TInt SetDriveName(TInt aDrive,const TDesC& aDriveName);
1988 EFSRV_IMPORT_C TInt LoaderHeapFunction(TInt aFunction, TAny *aArg1=NULL, TAny *aArg2=NULL);
1989 IMPORT_C TInt SetErrorCondition(TInt anError,TInt aCount=0);
1990 EFSRV_IMPORT_C TInt SetDebugRegister(TInt aVal);
1991 EFSRV_IMPORT_C TInt SetAllocFailure(TInt aAllocNum);
1992 EFSRV_IMPORT_C void DebugNotify(TInt aDrive,TUint aNotifyType,TRequestStatus& aStat);
1993 EFSRV_IMPORT_C TInt ControlIo(TInt aDrive,TInt aCommand);
1994 EFSRV_IMPORT_C TInt ControlIo(TInt aDrive,TInt aCommand,TDes8& aParam1);
1995 EFSRV_IMPORT_C TInt ControlIo(TInt aDrive,TInt aCommand,TDes8& aParam1,TDes8& aParam2);
1996 EFSRV_IMPORT_C TInt ControlIo(TInt aDrive,TInt aCommand,TAny* aParam1,TAny* aParam2);
1997 EFSRV_IMPORT_C TInt LockDrive(TInt aDrv, const TMediaPassword &aOld, const TMediaPassword &aNew, TBool aStr);
1998 EFSRV_IMPORT_C TInt UnlockDrive(TInt aDrv, const TMediaPassword &Pswd, TBool aStr);
1999 EFSRV_IMPORT_C TInt ClearPassword(TInt aDrv, const TMediaPassword &aPswd);
2000 EFSRV_IMPORT_C TInt ErasePassword(TInt aDrv);
2001 EFSRV_IMPORT_C TInt SetSessionToPrivate(TInt aDrive);
2002 EFSRV_IMPORT_C TInt PrivatePath(TDes& aPath);
2003 EFSRV_IMPORT_C TInt CreatePrivatePath(TInt aDrive);
2004 EFSRV_IMPORT_C void StartupInitComplete(TRequestStatus& aStat);
2005 EFSRV_IMPORT_C TInt SetLocalDriveMapping(const TDesC8& aMapping);
2007 EFSRV_IMPORT_C TInt FinaliseDrives();
2009 /** specifies drive finalisation modes */
2010 enum TFinaliseDrvMode
2012 EFinal_RW, ///< after successful finalisation the drive remains writable and will become "not finalised" after the first write operation.
2013 EFinal_RO, ///< after successful finalisation the drive becomes read-only
2014 EForceUnfinalise///< @internalComponent mark the drive as "not finalised" can result in KErrAbort if the dive is in inconsistent state.
2017 EFSRV_IMPORT_C TInt FinaliseDrive(TInt aDriveNo, TFinaliseDrvMode aMode) const;
2019 EFSRV_IMPORT_C TInt SwapFileSystem(const TDesC& aOldFileSystemName,const TDesC& aNewFileSystemName,TInt aDrive) const;
2020 EFSRV_IMPORT_C TInt ReserveDriveSpace(TInt aDriveNo, TInt aSpace);
2021 EFSRV_IMPORT_C TInt GetReserveAccess(TInt aDriveNo);
2022 EFSRV_IMPORT_C TInt ReleaseReserveAccess(TInt aDriveNo);
2024 EFSRV_IMPORT_C TInt AddPlugin(const TDesC& aFileName) const;
2025 EFSRV_IMPORT_C TInt RemovePlugin(const TDesC& aPluginName) const;
2026 EFSRV_IMPORT_C TInt PluginName(TDes& aPluginName,TInt aDrive,TInt aPos);
2028 EFSRV_IMPORT_C TInt MountPlugin(const TDesC& aPluginName) const;
2029 EFSRV_IMPORT_C TInt MountPlugin(const TDesC& aPluginName,TInt aDrive) const;
2030 EFSRV_IMPORT_C TInt MountPlugin(const TDesC& aPluginName,TInt aDrive, TInt aPos) const;
2032 EFSRV_IMPORT_C TInt DismountPlugin(const TDesC& aPluginName) const;
2033 EFSRV_IMPORT_C TInt DismountPlugin(const TDesC& aPluginName,TInt aDrive) const;
2034 EFSRV_IMPORT_C TInt DismountPlugin(const TDesC& aPluginName,TInt aDrive,TInt aPos) const;
2036 EFSRV_IMPORT_C void NotifyDismount(TInt aDrive, TRequestStatus& aStat, TNotifyDismountMode aMode=EFsDismountRegisterClient) const;
2037 EFSRV_IMPORT_C void NotifyDismountCancel(TRequestStatus& aStat) const;
2038 EFSRV_IMPORT_C void NotifyDismountCancel() const;
2039 EFSRV_IMPORT_C TInt AllowDismount(TInt aDrive) const;
2040 EFSRV_IMPORT_C TInt SetStartupConfiguration(TInt aCommand,TAny* aParam1,TAny* aParam2) const;
2041 EFSRV_IMPORT_C TInt AddCompositeMount(const TDesC& aFileSystemName,TInt aLocalDriveToMount,TInt aCompositeDrive, TBool aSync) const;
2042 EFSRV_IMPORT_C TInt SetNotifyChange(TBool aNotifyChange);
2043 EFSRV_IMPORT_C TInt QueryVolumeInfoExt(TInt aDrive, TQueryVolumeInfoExtCmd aCommand, TDes8& aInfo) const;
2044 EFSRV_IMPORT_C TInt VolumeIOParam(TInt aDriveNo, TVolumeIOParamInfo& aParamInfo) const;
2045 EFSRV_IMPORT_C TInt FileSystemSubType(TInt aDriveNo, TDes& aName) const;
2046 EFSRV_IMPORT_C TInt InitialisePropertiesFile(const TPtrC8& aPtr) const;
2048 IMPORT_C TInt AddProxyDrive(const TDesC& aFileName);
2049 IMPORT_C TInt RemoveProxyDrive(const TDesC& aDriveName);
2051 template <class T0,class T1> inline TInt MountProxyDrive(const TUint aDrive, const TDesC& aName, T0 a0, T1 a1)
2052 { return(DoMountProxyDrive(TIpcArgs(aDrive, &aName, a0, a1))); };
2053 IMPORT_C TInt DismountProxyDrive(const TUint aDrive);
2055 TInt Unclamp(const RFileClamp& aHandle);
2057 EFSRV_IMPORT_C TInt ReadFileSection(const TDesC& aName,TInt64 aPos,TDes8& aDes,TInt aLength) const;
2060 This class is used to for returning meaningful error code values to users of RFs::IsValidName(const TDesC& ,TNameValidParam& )
2063 class TNameValidParam
2066 /** Initialises the members of the class. By default iUseSessionPath is set to EFalse, however one could set it to ETrue.*/
2067 inline TNameValidParam(TBool aUseSessionPath = EFalse);
2069 /** possible error codes */
2072 ErrNone, ///< no error.
2073 ErrBadCharacter, ///< aName contains a bad character; and its position is in iInvalidCharPos.
2074 ErrBadName, ///< aName isn't a valid file or directory name.
2075 ErrNameTooLong ///< aName length or aName + session path length (see iUseSessionPath) is longer than 256 characters.
2078 inline TError ErrorCode() const;
2079 inline void UseSessionPath(TBool aUseSessionPath);
2080 inline TUint InvalidCharPos() const;
2081 friend class TFsIsValidName;
2083 TError iError; ///< the reason why aName is invalid, see TError
2084 TBool iUseSessionPath; ///< if ETrue, and if aName isn't fully specified, missing parts will be taken from the session path
2085 TUint iInvalidCharPos; ///< may contain invalid character position if error is ErrBadCharacter,else 0.
2087 EFSRV_IMPORT_C TBool IsValidName(const TDesC& aName, TNameValidParam& aParam );
2089 /** Special enumerator values for the SupportedFileSystemName() API */
2092 KRootFileSystem = 0x00800000, ///< specifies "root" file system. The result will be the same as for FileSystemName() API call
2093 KFirstChildFileSystem = 0 ///< specifies the first child file system number, the second will be KFirstChildFileSystem+1 etc.
2096 EFSRV_IMPORT_C TInt SupportedFileSystemName(TDes& aName, TInt aDrive, TInt aFsEnumerator) const;
2099 TInt SendReceive(TInt aFunction,const TIpcArgs& aArgs) const;
2102 void GetDirL(const TDesC& aMatchName,TUint anEntryAttMask,TUint anEntrySortKey,CDir*& anEntryList,CDir*& aDirList,RDir& aDir) const;
2103 void GetDirL(const TDesC& aMatchName,TUint anEntryAttMask,TUint anEntrySortKey,CDir*& anEntryList,RDir& aDir) const;
2104 void GetDirL(const TDesC& aMatchName,const TUidType& aUidType,TUint anEntrySortKey,CDir*& anEntryList,RDir& aDir) const;
2105 void DoGetDirL(TUint anEntrySortKey,CDir*& anEntryList,RDir& aDir) const;
2106 TInt GetOpenFileList(TInt& aSessionNum,TInt& aLocalPos,TThreadId& aThreadId,TEntryArray& anArray) const;
2108 IMPORT_C TInt DoMountProxyDrive(const TIpcArgs& ipcArgs);
2110 friend class TOpenFileScan;
2111 friend class RFsPlugin;
2115 //-------------------------------------------------------------------------------------------------------------------
2119 Base class for volume formatting parameters. This class package buffer, TVolFormatParamBuf or
2120 packaged buffer of the derived class can be passed to the RFormat::Open() in order to provide
2121 file system-specific formatting parameters.
2122 Each file system that supports such formatting parameters shall have this class specialisation (e.g. TVolFormatParam_FAT)
2123 All classes, derived from this one must have the same size as the base class.
2124 In order to use formatting parameters the format mode shall have ESpecialFormat bit flag set.
2127 @see RFormat::Open(RFs&,const TDesC&,TUint,TInt& ,const TDesC8& anInfo);
2128 @see TVolFormatParamBuf
2133 class TVolFormatParam
2136 inline TVolFormatParam();
2139 inline void SetFileSystemName(const TDesC& aFsName);
2141 static inline TUint32 CalcFSNameHash(const TDesC& aFsName);
2142 inline TUint32 FSNameHash() const;
2144 inline TBool SomeParamsSet() const;
2150 enum {KMaxDataSlots = 64}; ///< the size of data array iData
2152 inline void SetVal(TUint aIndex, TUint32 aVal);
2153 inline TUint32 GetVal(TUint aIndex) const;
2157 enum {KUId = 0x820116A2}; ///< this value shell be in iUid field to identify this class object
2160 This class tree UID. Used to distinguish the object of this class from TLDFormatInfo and other possible data structures.
2161 For this and derived classes this field must be KUId. This field offset in the class must be 0
2166 TUint32 iFSysNameHash; ///< Up-cased file system name hash (crc32) used to designate the file system. 0 means "not set"
2167 TBool iParamsSet : 1; ///< ETrue if any parameter was set (SetVal() called). Gets reset to EFalse by Init()
2168 TUint32 iData[KMaxDataSlots]; ///< used as a pool for various data. The derived classes are free to use it by SetVal()/GetVal()
2171 __ASSERT_COMPILE(_FOFF(TVolFormatParam, iUId) == 0);
2174 /** package buffer for the objects of class TVolFormatParamBuf */
2175 typedef TPckgBuf<TVolFormatParam> TVolFormatParamBuf;
2180 #ifndef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
2185 Creates and opens a file, and performs all operations on a single open file.
2189 - reading from and writing to the file
2191 - seeking to a position within the file
2193 - locking and unlocking within the file
2195 - setting file attributes
2197 Before using any of these services, a connection to a file server session must
2198 have been made, and the file must be open.
2202 - use Open() to open an existing file for reading or writing; an error is
2203 returned if it does not already exist.
2204 To open an existing file for reading only, use Open() with an access mode of
2205 EFileRead, and a share mode of EFileShareReadersOnly.
2207 - use Create() to create and open a new file for writing; an error is returned
2208 if it already exists.
2210 - use Replace() to open a file for writing, replacing any existing file of
2211 the same name if one exists, or creating a new file if one does not exist.
2212 Note that if a file exists, its length is reset to zero.
2214 - use Temp() to create and open a temporary file with a unique name,
2215 for writing and reading.
2217 When opening a file, you must specify the file server session to use for
2218 operations with that file. If you do not close the file explicitly, it is
2219 closed when the server session associated with it is closed.
2221 Reading and Writing:
2223 There are several variants of both Read() and Write().
2224 The basic Read(TDes8& aDes) and Write(const TDesC8& aDes) are supplemented
2225 by variants allowing the descriptor length to be overridden, or the seek
2226 position of the first byte to be specified, or asynchronous completion,
2229 Reading transfers data from a file to a descriptor, and writing transfers
2230 data from a descriptor to a file. In all cases, the file data is treated
2231 as binary and byte descriptors are used (TDes8, TDesC8).
2241 Creates and opens a file, and performs all operations on a single open file.
2245 - reading from and writing to the file
2247 - seeking to a position within the file
2249 - locking and unlocking within the file
2251 - setting file attributes
2253 Before using any of these services, a connection to a file server session must
2254 have been made, and the file must be open.
2258 - use Open() to open an existing file for reading or writing; an error is
2259 returned if it does not already exist.
2260 To open an existing file for reading only, use Open() with an access mode of
2261 EFileRead, and a share mode of EFileShareReadersOnly.
2263 - use Create() to create and open a new file for writing; an error is returned
2264 if it already exists.
2266 - use Replace() to open a file for writing, replacing any existing file of
2267 the same name if one exists, or creating a new file if one does not exist.
2268 Note that if a file exists, its length is reset to zero.
2270 - use Temp() to create and open a temporary file with a unique name,
2271 for writing and reading.
2273 When opening a file, you must specify the file server session to use for
2274 operations with that file. If you do not close the file explicitly, it is
2275 closed when the server session associated with it is closed.
2277 Reading and Writing:
2279 There are several variants of both Read() and Write().
2280 The basic Read(TDes8& aDes) and Write(const TDesC8& aDes) are supplemented
2281 by variants allowing the descriptor length to be overridden, or the seek
2282 position of the first byte to be specified, or asynchronous completion,
2285 Reading transfers data from a file to a descriptor, and writing transfers
2286 data from a descriptor to a file. In all cases, the file data is treated
2287 as binary and byte descriptors are used (TDes8, TDesC8).
2289 RFile class supports operations on files of size less than or equal to 2GB - 1.
2290 If the file size is greater than 2GB - 1 (large file), use of class RFile64 is
2291 recommended for following operations:
2292 1. Opening a large file
2293 2. Creating a file which can grow beyond 2GB - 1 by size
2294 3. Creating a temporary file which can grow beyond 2GB - 1 by size
2295 4. Replacing an existing file after which it can grow beyond 2GB - 1 by size
2296 5. Adopting a large file handle from client
2297 6. Adopting a large file handle from server
2298 7. Adopting a large file handle from another process
2299 8. Read from a position greater than 2GB - 1
2300 9. Writing to a file by which the size can grow beyond 2GB - 1
2301 10. Seek to a position greater than 2GB - 1
2302 11. Setting a size greater than 2GB - 1
2303 12. Querying the file size (greater than 2GB - 1)
2304 13. Locking and unlocking a position and length that is beyond 2GB - 1
2316 class RFile : public RSubSessionBase
2319 EFSRV_IMPORT_C TInt Open(RFs& aFs,const TDesC& aName,TUint aFileMode);
2320 EFSRV_IMPORT_C void Close();
2321 EFSRV_IMPORT_C TInt Create(RFs& aFs,const TDesC& aName,TUint aFileMode);
2322 EFSRV_IMPORT_C TInt Replace(RFs& aFs,const TDesC& aName,TUint aFileMode);
2323 EFSRV_IMPORT_C TInt Temp(RFs& aFs,const TDesC& aPath,TFileName& aName,TUint aFileMode);
2324 EFSRV_IMPORT_C TInt Read(TDes8& aDes) const;
2325 EFSRV_IMPORT_C void Read(TDes8& aDes,TRequestStatus& aStatus) const;
2326 EFSRV_IMPORT_C TInt Read(TDes8& aDes,TInt aLength) const;
2327 EFSRV_IMPORT_C void Read(TDes8& aDes,TInt aLength,TRequestStatus& aStatus) const;
2328 EFSRV_IMPORT_C TInt Read(TInt aPos,TDes8& aDes) const;
2329 EFSRV_IMPORT_C void Read(TInt aPos,TDes8& aDes,TRequestStatus& aStatus) const;
2330 EFSRV_IMPORT_C TInt Read(TInt aPos,TDes8& aDes,TInt aLength) const;
2331 EFSRV_IMPORT_C void Read(TInt aPos,TDes8& aDes,TInt aLength,TRequestStatus& aStatus) const;
2332 EFSRV_IMPORT_C void ReadCancel(TRequestStatus& aStatus) const;
2333 EFSRV_IMPORT_C void ReadCancel() const;
2334 EFSRV_IMPORT_C TInt Write(const TDesC8& aDes);
2335 EFSRV_IMPORT_C void Write(const TDesC8& aDes,TRequestStatus& aStatus);
2336 EFSRV_IMPORT_C TInt Write(const TDesC8& aDes,TInt aLength);
2337 EFSRV_IMPORT_C void Write(const TDesC8& aDes,TInt aLength,TRequestStatus& aStatus);
2338 EFSRV_IMPORT_C TInt Write(TInt aPos,const TDesC8& aDes);
2339 EFSRV_IMPORT_C void Write(TInt aPos,const TDesC8& aDes,TRequestStatus& aStatus);
2340 EFSRV_IMPORT_C TInt Write(TInt aPos,const TDesC8& aDes,TInt aLength);
2341 EFSRV_IMPORT_C void Write(TInt aPos,const TDesC8& aDes,TInt aLength,TRequestStatus& aStatus);
2342 EFSRV_IMPORT_C TInt Lock(TInt aPos,TInt aLength) const;
2343 EFSRV_IMPORT_C TInt UnLock(TInt aPos,TInt aLength) const;
2344 EFSRV_IMPORT_C TInt Seek(TSeek aMode,TInt& aPos) const;
2345 EFSRV_IMPORT_C TInt Flush();
2346 EFSRV_IMPORT_C void Flush(TRequestStatus& aStatus);
2347 EFSRV_IMPORT_C TInt Size(TInt& aSize) const;
2348 EFSRV_IMPORT_C TInt SetSize(TInt aSize);
2349 EFSRV_IMPORT_C TInt Att(TUint& aAttValue) const;
2350 EFSRV_IMPORT_C TInt SetAtt(TUint aSetAttMask,TUint aClearAttMask);
2351 EFSRV_IMPORT_C TInt Modified(TTime& aTime) const;
2352 EFSRV_IMPORT_C TInt SetModified(const TTime& aTime);
2353 EFSRV_IMPORT_C TInt Set(const TTime& aTime,TUint aSetAttMask,TUint aClearAttMask);
2354 EFSRV_IMPORT_C TInt ChangeMode(TFileMode aNewMode);
2355 EFSRV_IMPORT_C TInt Rename(const TDesC& aNewName);
2356 EFSRV_IMPORT_C TInt Drive(TInt &aDriveNumber, TDriveInfo &aDriveInfo) const;
2357 EFSRV_IMPORT_C TInt Adopt(RFs& aFs, TInt aHandle);
2358 EFSRV_IMPORT_C TInt AdoptFromClient(const RMessage2& aMsg, TInt aFsHandleIndex, TInt aFileHandleIndex);
2359 EFSRV_IMPORT_C TInt AdoptFromServer(TInt aFsHandle, TInt aFileHandle);
2360 EFSRV_IMPORT_C TInt AdoptFromCreator(TInt aFsIndex, TInt aFileHandleIndex);
2361 EFSRV_IMPORT_C TInt Name(TDes& aName) const;
2362 EFSRV_IMPORT_C TInt TransferToServer(TIpcArgs& aIpcArgs, TInt aFsHandleIndex, TInt aFileHandleIndex) const;
2363 EFSRV_IMPORT_C TInt TransferToClient(const RMessage2& aMsg, TInt aFileHandleIndex) const;
2364 EFSRV_IMPORT_C TInt TransferToProcess(RProcess& aProcess, TInt aFsHandleIndex, TInt aFileHandleIndex) const;
2365 EFSRV_IMPORT_C TInt Duplicate(const RFile& aFile, TOwnerType aType=EOwnerProcess);
2366 EFSRV_IMPORT_C TInt FullName(TDes& aName) const;
2367 EFSRV_IMPORT_C TInt BlockMap(SBlockMapInfo& aInfo, TInt64& aStartPos, TInt64 aEndPos=-1, TInt aBlockMapusage=EBlockMapUsagePaging) const;
2368 TInt Clamp(RFileClamp& aHandle);
2371 // RSubSessionBase overrides
2372 TInt CreateSubSession(const RSessionBase& aSession,TInt aFunction,const TIpcArgs& aArgs);
2373 void CloseSubSession(TInt aFunction);
2374 TInt SendReceive(TInt aFunction,const TIpcArgs& aArgs) const;
2376 TInt DuplicateHandle(TInt& aSubSessionHandle) const;
2378 friend class RFilePlugin;
2381 #ifdef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
2382 #include <f32file64.h>
2385 class RDir : public RSubSessionBase
2390 Reads the entries contained in a directory.
2392 You must first open the directory, specifying an attribute mask which is used
2393 by Read() calls to filter the entry types required. Then, use one of
2394 the Read() functions to read the filtered entries. When the operation
2395 is complete, the directory should be closed using Close()
2397 There are two types of Read(): one works with a single entry at a time,
2398 requiring programs to iterate through the entries explicitly.
2399 The other works with an entire TEntryArray, allowing multiple entries to be
2401 As well as making application program logic somewhat simpler, this type
2402 uses fewer calls to the server, and is more efficient.
2404 Each type of Read() can be performed either synchronously or asynchronously.
2406 It may be more convenient to use RFs::GetDir() than the Read() calls supported
2408 RFs::GetDir() has the advantage that it allows a directory’s entries to be
2409 sorted in various ways.
2410 However, it does not provide asynchronous as well as synchronous variants
2411 and does not allow entries to be read individually.
2417 EFSRV_IMPORT_C TInt Open(RFs& aFs,const TDesC& aMatchName,const TUidType& aUidType);
2418 EFSRV_IMPORT_C TInt Open(RFs& aFs,const TDesC& aMatchName,TUint anAttMask);
2419 EFSRV_IMPORT_C void Close();
2420 EFSRV_IMPORT_C TInt Read(TEntryArray& anArray) const;
2421 EFSRV_IMPORT_C void Read(TEntryArray& anArray,TRequestStatus& aStatus) const;
2422 EFSRV_IMPORT_C TInt Read(TEntry& anEntry) const;
2423 EFSRV_IMPORT_C void Read(TPckg<TEntry>& anEntry,TRequestStatus& aStatus) const;
2426 // RSubSessionBase overrides
2427 TInt SendReceive(TInt aFunction,const TIpcArgs& aArgs) const;
2429 friend class RDirPlugin;
2433 class RFormat : public RSubSessionBase
2438 Formats a device, one step at a time.
2440 RFormat must first be opened on a device before formatting each
2443 There is also an asynchronous version of Next() which, if encapsulated into
2444 a suitable active object, can be used to implement a
2445 user-interruptible formatting process.
2449 IMPORT_C TInt Open(RFs& aFs,const TDesC& aName,TUint aFormatMode,TInt& aCount);
2450 IMPORT_C TInt Open(RFs& aFs,const TDesC& aName,TUint aFormatMode,TInt& aCount,const TDesC8& anInfo);
2451 IMPORT_C void Close();
2452 IMPORT_C TInt Next(TInt& aStep);
2453 IMPORT_C void Next(TPckgBuf<TInt>& aStep,TRequestStatus& aStatus);
2459 class RRawDisk : public RSubSessionBase
2464 Enables direct disk access.
2466 No other resources can access the disk while direct access to it is in effect.
2468 This class is not intended for user derivation.
2472 IMPORT_C TInt Open(RFs& aFs,TInt aDrive);
2473 IMPORT_C void Close();
2474 IMPORT_C TInt Read(TInt64 aPos,TDes8& aDes);
2475 IMPORT_C TInt Write(TInt64 aPos,TDesC8& aDes);
2484 NONSHARABLE_CLASS(CDirScan) : public CBase
2489 Scans a directory structure.
2491 The scan moves from directory to directory through the hierarchy, returning
2492 a list of the entries contained in each. The order in which the directories
2493 are scanned is determined by a sort key which is specified when setting up
2494 the scan. The base directory to be scanned and the entry types of interest
2495 must also be specified before performing the scan.
2497 This class is not intended for user derivation
2502 Defines the scan direction.
2507 Scan upwards from the lowest level directory in the hierarchy to
2508 the top level directory.
2513 Scan downwards from the top level directory in the hierarchy to
2514 the bottom level directory.
2519 IMPORT_C static CDirScan* NewL(RFs& aFs);
2520 IMPORT_C static CDirScan* NewLC(RFs& aFs);
2521 IMPORT_C ~CDirScan();
2522 IMPORT_C void SetScanDataL(const TDesC& aMatchName,TUint anEntryAttMask,TUint anEntrySortMask,TScanDirection aScanDir=EScanDownTree);
2523 IMPORT_C void NextL(CDir*& aDirEntries);
2524 IMPORT_C TPtrC AbbreviatedPath();
2525 IMPORT_C TPtrC FullPath();
2530 void UpdateAbbreviatedPath();
2531 void ScanUpTreeL(CDir*& aDirEntries);
2532 void ScanDownTreeL(CDir*& aDirEntries);
2533 void GetDirEntriesL(CDir*& aDirEntries);
2537 TPtrC iAbbreviatedPath;
2538 TInt iAbbreviatedPathPos;
2539 TUint iEntryAttMask;
2540 TUint iEntrySortMask;
2542 TScanDirection iScanDir;
2554 A list of CFileMan error codes.
2560 No additional error information is available, either because
2561 the latest CFileMan operation did not return an error, or if it did,
2562 the error was not one for which additional information is available.
2564 ENoExtraInformation,
2568 A leave occurred while setting up the initial scan.
2570 This indicates that the operation did not begin.
2574 EInitializationFailed,
2578 A leave occurred while scanning the next directory in the course of a file
2579 management function.
2581 This indicates that the operation did begin.
2585 EScanNextDirectoryFailed,
2589 Error occurred when attempting to open the source file for a file copy
2596 Error occurred while attempting to create, or, if overwriting is in effect,
2597 replace the target file for a file copy or move.
2603 The operation completed without processing any files because no matching
2612 class MFileManObserver
2617 Provides notification of the progress of synchronous or asynchronous
2618 file management operations.
2620 It should be inherited by classes which implement this protocol.
2622 The enquiry functions provided by CFileBase and CFileMan may be used by
2623 the observer to display information about the progress of the operation
2624 such as error messages, the names of the target and destination files,
2625 and the number of bytes transferred during a copy operation.
2626 Notification may take place before or after an entry has been processed,
2627 or during a file copy or move.
2628 Each notification function returns a value which can be used to enable
2629 the user to control the progress of the operation, for example to cancel
2630 a long-running multiple file copy.
2631 To use this class, pass a pointer to an instance of the class to
2632 the CFileMan constructor, or use SetObserver(), defined in CFileBase.
2637 Control for the current CFileMan operation.
2642 Proceed with the current or the next entry.
2648 Retry processing the previous entry.
2654 Abort operation, causes function to return KErrCancel.
2660 Cancel processing the current entry.
2665 IMPORT_C virtual TControl NotifyFileManStarted();
2666 IMPORT_C virtual TControl NotifyFileManOperation();
2667 IMPORT_C virtual TControl NotifyFileManEnded();
2673 class CFileBase : public CBase
2678 Abstract base class for file management.
2680 It provides functions to set an observer for the derived class
2681 CFileMan, and to get information about the entry being processed.
2687 IMPORT_C void SetObserver(MFileManObserver* anObserver);
2689 IMPORT_C const TEntry& CurrentEntry();
2690 IMPORT_C TPtrC AbbreviatedPath();
2691 IMPORT_C TPtrC FullPath();
2692 IMPORT_C TInt GetLastError();
2693 IMPORT_C TFileManError GetMoreInfoAboutError();
2695 IMPORT_C CFileBase(RFs& anFs);
2696 IMPORT_C void ConstructL();
2697 IMPORT_C ~CFileBase();
2698 IMPORT_C void RunL();
2699 IMPORT_C void RunInSeparateThreadL(TThreadFunction aThreadFunction);
2702 Called from RunL to perform tidy up after an operation.
2705 @see CFileBase::RunL
2707 virtual void CompleteOperationL() {};
2711 Called from RunL to perform the requested operation.
2714 @see CFileBase::RunL
2716 virtual void DoOperationL() = 0;
2720 RThread iFManThread;
2721 RSemaphore iSynchronizer;
2728 MFileManObserver* iObserver;
2730 TFileManError iErrorInfo;
2731 TRequestStatus* iStatus;
2732 HBufC* iSessionPath;
2733 TInt iNumberOfFilesProcessed;
2738 friend void DoFManBaseOperationL(TAny* aPtr);
2739 friend TInt FManBaseThreadFunction(TAny* aPtr);
2745 NONSHARABLE_CLASS(CFileMan) : public CFileBase
2750 Offers file management services which accept the use of wildcards;
2751 synchronous and asynchronous.
2753 It also provides enquiry functions, which, like those provided by
2754 the base class CFileBase, may be used by an observer class object
2755 to provide the user with information about the progress of the operation.
2757 All of the file management functions provided by this class accept the use of
2758 wildcards, and may operate either synchronously or asynchronously.
2759 When CFileMan is operating asynchronously, the operation takes place in
2760 a separate thread from the calling code.
2762 A file notification observer (an instance of a class deriving
2763 from MFileManObserver) may optionally be used by CFileMan when operating
2764 synchronously or asynchronously. If provided, the appropriate notification
2765 function is called before or after each entry has been processed,
2766 or during a file copy or move.
2767 This notification can be used to provide information about the state of
2768 the operation, such as the number of bytes transferred during a
2769 large-scale file copy. It can also be used to allow the user to cancel,
2770 retry or continue processing an entry, or to abort the whole operation.
2771 If such notification is required, specify an object deriving from
2772 MFileManObserver class in the constructor, or call SetObserver(),
2773 defined in the base class, CFileBase.
2775 All of the file manipulation functions except Rename() may operate recursively,
2776 and all can operate non-recursively. When operating recursively,
2777 these functions will act on all matching files located throughout
2778 the source directory’s hierarchy. When operating non-recursively,
2779 these functions act upon files contained in the single top level source
2780 directory only. Recursion is set or unset using the switch parameter to
2783 This class is not intended for user derivation.
2787 To support wildcard, CFileMan needs to store the entire directory entry
2788 information. Therefore, in a extreme condition, if a directory contains
2789 a huge number of files (e.g. more than 15000 files with 10 characters' long file
2790 names), user may encounter KErrNoMemory errors. Developers who have a need to handle
2791 this rare case should increase the heap size limitation of their applications.
2793 For more information about heap size configuration, please refer following
2794 section in Symbian Developer Library:
2795 Symbian OS build guide >> Build Tools Reference >> MMP file syntax >> epocheapsize
2797 @see MFileManObserver
2802 An enumeration that identifies CFileMan tasks. This enumeration is used
2803 by CurrentAction() to identify which task currently being carried out.
2805 @see CFileMan::CurrentAction
2846 Deleting a directory and all contents
2852 Renaming component to VFAT short name (guaranteed to be unique)
2854 ERenameInvalidEntry,
2857 Copying file from open file handle
2864 Overwriting and recursion switch.
2866 Used in CFileMan functions to set whether operations are applied to
2867 the specified directory and all directories below it, or
2868 the specified directory only.
2873 Any files in the destination directory that have the same name as
2874 the source files in a rename, move or copy operation, will
2881 Recursive operation.
2886 IMPORT_C static CFileMan* NewL(RFs& aFs);
2887 IMPORT_C static CFileMan* NewL(RFs& aFs,MFileManObserver* anObserver);
2889 IMPORT_C TAction CurrentAction();
2890 IMPORT_C void GetCurrentTarget(TFileName& aFile);
2891 IMPORT_C void GetCurrentSource(TFileName& aFile);
2892 IMPORT_C TInt BytesTransferredByCopyStep();
2894 IMPORT_C TInt Attribs(const TDesC& aName,TUint aSetMask,TUint aClearMask,const TTime& aTime,TUint aSwitch=0);
2895 IMPORT_C TInt Attribs(const TDesC& aName,TUint aSetMask,TUint aClearMask,const TTime& aTime,TUint aSwitch,TRequestStatus& aStatus);
2896 IMPORT_C TInt Copy(const TDesC& anOld,const TDesC& aNew,TUint aSwitch=EOverWrite);
2897 IMPORT_C TInt Copy(const TDesC& anOld,const TDesC& aNew,TUint aSwitch,TRequestStatus& aStatus);
2898 IMPORT_C TInt Delete(const TDesC& aName,TUint aSwitch=0);
2899 IMPORT_C TInt Delete(const TDesC& aName,TUint aSwitch,TRequestStatus& aStatus);
2900 IMPORT_C TInt Move(const TDesC& anOld,const TDesC& aNew,TUint aSwitch=EOverWrite);
2901 IMPORT_C TInt Move(const TDesC& anOld,const TDesC& aNew,TUint aSwitch,TRequestStatus& aStatus);
2902 IMPORT_C TInt Rename(const TDesC& anOld,const TDesC& aNew,TUint aSwitch=EOverWrite);
2903 IMPORT_C TInt Rename(const TDesC& anOld,const TDesC& aNew,TUint aSwitch,TRequestStatus& aStatus);
2904 IMPORT_C TInt RmDir(const TDesC& aDirName);
2905 IMPORT_C TInt RmDir(const TDesC& aDirName,TRequestStatus& aStatus);
2906 IMPORT_C TInt Copy(const RFile& anOld,const TDesC& aNew,TUint aSwitches=EOverWrite);
2907 IMPORT_C TInt Copy(const RFile& anOld,const TDesC& aNew,TUint aSwitches,TRequestStatus& aStatus);
2910 TInt RenameInvalidEntry(const TDesC& anOld,const TDesC& aNew,TUint aSwitch=EOverWrite);
2913 This is an internal enumeration for CFileMan implementation.
2914 THis enumeration is mapped into TAction when user wants to identify the current
2915 task of CFileMan by CurrentAction().
2917 @see CFileMan::TAction
2918 @see CFileMan::CurrentAction
2920 enum TInternalAction
2923 Internal indicator for None operation.
2924 This is mapped to CFileMan::ENone.
2929 Internal indicator for Attribs() operation.
2930 This is mapped to CFileMan::EAttribs.
2935 Internal indicator for Copy() operation.
2936 This is mapped to CFileMan::ECopy.
2941 Internal indicator for Delete() operation.
2942 This is mapped to CFileMan::EDelete.
2947 Internal indicator for Move() operation on different drives.
2948 This is mapped to CFileMan::Move.
2950 EInternalCopyForMove,
2953 Internal indicator for Move() operation on the same drive.
2954 This is mapped to CFileMan::Rename.
2955 Note for compatibility reasons, it is not mapped to CFileMan::Move.
2957 EInternalRenameForMove,
2960 Internal indicator for Rename() operation.
2961 This is mapped to CFileMan::ERename.
2966 Internal indicator for RmDir() operation.
2967 This is mapped to CFileMan::ERmDir.
2972 Internal indicator for RenameInvalidEntry() operation.
2973 This is mapped to CFileMan::ERenameInvalidEntry.
2975 EInternalRenameInvalidEntry,
2978 Internal indicator for CopyFromHandle() operation.
2979 This is mapped to CFileMan::ECopyFromHandle.
2981 EInternalCopyFromHandle,
2984 void CompleteOperationL();
2985 void DoOperationL();
2986 void CheckForDirectory();
2987 void SetFlags(TBool aOverWrite,TBool aRecurse,TBool aScanDirection,TBool aMoveRename);
2988 void GetSrcAndTrg(TParse& aSrcName,TFileName& aTrgName);
2989 void DoSynchronize(TInt aRetVal);
2990 TInt CheckRenameAllowed(const TDesC& aSrcName,const TDesC& aTrgName);
2991 TInt SetupMoveOnSameDrive(TUint aSwitches, TBool& aComplete);
2992 TInt SetupMoveAcrossDrives(TUint aSwitches);
2993 TInt SetupTargetDirectory(TBool aOverWrite, TBool& aComplete);
2994 TBool SrcTrgDrivesIdentical();
2995 TInt SetupDirectoryForMove(TBool& aSrcIsDir);
2998 void DoCopyOrMoveL();
3002 void DoCopyFromHandleL();
3003 #ifndef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
3004 TInt DoCopy(const RFile& aSrcFile, RFile& aDstFile, TInt& aRet);
3006 TInt DoCopy(const RFile64& aSrcFile, RFile64& aDstFile, TInt& aRet);
3010 TInternalAction iAction;
3014 TInt iBytesTransferred;
3015 #ifndef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
3016 RFile iSrcFileHandle;
3018 RFile64 iSrcFileHandle;
3020 TBool iMovingContents;
3023 TFileName iTmpName1;
3024 TFileName iTmpName2;
3026 friend void RenameInvalidEntryL(RFs& aFs,TParse& aSrcFile);
3037 Searches for files and directories.
3039 Each function has a variant which searches for multiple files/directories,
3040 using one or more wildcard characters in the filename.
3041 If an initial search is successful, further searches can be carried out
3042 using Find() or FindWild().
3043 You can also retrieve the fully qualified file specification,
3044 and manipulate and interrogate it using the TParse class (or related classes).
3046 Note that when specifying the path of a directory to search, the path should
3047 always end with a backslash character.When trailing backslash is not present
3048 then it is considered as file. And path will be taken till last backslash.
3049 The client must have appropriate capabilities for the directory to be searched.
3050 For example without ALL FILES Capability, it is not possible to successfully
3051 find any files under \sys\bin directory.
3053 By default if the file is not found in the current drive the rest of the drives,
3054 excluding the remote ones, will be searched. Using function SetFindMask it is
3055 possible to specify a combination of drive attributes(aMask) that the drives to
3056 be searched must match.
3061 IMPORT_C TFindFile(RFs& aFs);
3062 IMPORT_C TInt FindByPath(const TDesC& aFileName,const TDesC* aPathList);
3063 IMPORT_C TInt FindByDir(const TDesC& aFileName,const TDesC& aDirPath);
3064 IMPORT_C TInt Find();
3065 IMPORT_C TInt FindWildByPath(const TDesC& aFileName,const TDesC* aPathList,CDir*& aDirList);
3066 IMPORT_C TInt FindWildByDir(const TDesC& aFileName,const TDesC& aDirPath,CDir*& aDir);
3067 IMPORT_C TInt FindWild(CDir*& aDirList);
3068 IMPORT_C TInt SetFindMask(TUint aMask);
3069 inline const TDesC& File() const;
3072 TInt DoFindByPath(const TDesC& aFileName,const TDesC* aPathList);
3073 TInt DoFindByDir(const TDesC& aFileName,const TDesC& aDir);
3075 TInt DoFindNextInPath();
3076 TInt DoFindNextInDriveList();
3084 TDriveList iDrvList;
3096 Contains a list of entries for the files which were opened in
3097 a file server session.
3101 typedef CDir CFileList;
3111 Scans open files to get a list of the entries for all files which are currently
3112 open in a particular file server session.
3114 NextL() creates a list of the files opened by the session.
3115 The ID of the thread which opened the files listed may be obtained by calling ThreadId().
3116 If multiple sessions are in use, repeatedly calling NextL() will return a list
3117 of open files in each session.
3121 IMPORT_C TOpenFileScan(RFs& aFs);
3122 IMPORT_C void NextL(CFileList*& aFileList);
3123 IMPORT_C TThreadId ThreadId() const;
3126 TThreadId iThreadId;
3139 Reads and writes single lines of text to or from a Unicode file.
3150 IMPORT_C TFileText();
3151 IMPORT_C void Set(RFile& aFile);
3152 IMPORT_C TInt Read(TDes& aDes);
3153 IMPORT_C TInt Write(const TDesC& aDes);
3154 IMPORT_C TInt Seek(TSeek aMode);
3157 TInt CheckForTerminator(TBool& anAnswer);
3163 #ifndef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
3168 TBuf8<0x100> iReadBuf;
3178 IMPORT_C TBool FileNamesIdentical(const TDesC& aFileName1,const TDesC& aFileName2);
3184 The UID of the File Server process
3186 const TInt KFileServerUidValue = 0x100039e3;
3189 #include <f32file.inl>
3190 #ifdef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
3191 #include <f32file64.inl>
3194 #ifdef SYMBIAN_F32_ENHANCED_CHANGE_NOTIFICATION
3195 #include <f32notification.h>
3198 #ifndef SYMBIAN_ENABLE_SPLIT_HEADERS
3199 #include <f32file_private.h>