chxavfileutil.h
上传用户:dangjiwu
上传日期:2013-07-19
资源大小:42019k
文件大小:6k
源码类别:

Symbian

开发平台:

Visual C++

  1. /*****************************************************************************
  2.  * chxavfileutil.h
  3.  * ---------------
  4.  *
  5.  * Synopsis:
  6.  * File utility namespace.
  7.  *
  8.  * Target:
  9.  * Symbian OS
  10.  *
  11.  *
  12.  * (c) 1995-2003 RealNetworks, Inc. Patents pending. All rights reserved.
  13.  *
  14.  *****************************************************************************/
  15. #ifndef _chxavfileutil_h_
  16. #define _chxavfileutil_h_
  17. // Helix includes...
  18. // Includes from this project...
  19. #include "chxavstringutils.h"
  20. #include "chxavnamedisplaytrait.h"
  21. #include "hxsym_filetype.h"
  22. class TDataType;
  23. struct IHXPreferences;
  24. namespace CHXAvFile
  25. {
  26. enum NameType
  27. {
  28.     ntFile,
  29.     ntFolder,
  30.     ntUnspecified // determine either file or folder operation by presence of path suffix ('/')
  31. };
  32. // for GetFileNameValidity()
  33. enum FileNameValidity
  34. {
  35.     nvInvalidIllegalChars,
  36.     nvInvalidDots,
  37.     nvTooLong,
  38.     nvValid
  39. };
  40. // for GetDriveInfo()
  41. enum DriveState
  42. {
  43.     dsAccessible,
  44.     dsCorrupted,
  45.     dsLocked,
  46.     dsUnknown
  47. };
  48. // for GetDriveInfo()
  49. struct DriveInfo
  50. {
  51.     DriveInfo();
  52.     TInt            idxDrive;
  53.     TMediaType      type;
  54.     DriveState      state;
  55.     bool            bVolInfoValid;
  56.     TVolumeInfo     volInfo; 
  57. };
  58. /////////////////////
  59. // ctor
  60. inline
  61. DriveInfo::DriveInfo()
  62. : idxDrive(-1)
  63. , type(EMediaUnknown)
  64. , state(dsUnknown)
  65. , bVolInfoValid(false)
  66. {
  67. }
  68. // FileInfo
  69. struct FileInfo {
  70.     FileInfo()
  71. : m_entry(), m_type(ftUnknown) {}
  72.     FileInfo(const TEntry& entry, const FileType& type)
  73. : m_entry(entry), m_type(type) {}
  74.     TEntry m_entry;
  75.     FileType m_type;
  76. };
  77. //
  78. // parsing, forming paths
  79. //
  80. TFileName* AllocFileNameL(const TDesC& first, const TDesC& second, NameType type = CHXAvFile::ntFile);
  81. TFileName* AllocFileNameL(const TDesC& path, NameType type = CHXAvFile::ntFile);
  82. void AppendPath(TDes& path, const TDesC& name, NameType type);
  83. void EnsureFolderSuffix(TDes& des);
  84. void TrimFolderSuffix(TFileName* pPath);
  85. TPtrC GetFolderPath(const TDesC& path);
  86. TPtrC GetParentFolder(const TDesC& path);
  87. TPtrC GetNakedPathNode(const TDesC& path);
  88. TPtrC GetNakedName(const TDesC& path);
  89. TPtrC GetExtension(const TDesC& path);
  90. TPtrC GetEnsureNoFolderSuffix(const TDesC& path);
  91. bool IsSubPath(const TDesC& parentPath, const TDesC& childPath);
  92. bool HasFolderPrefix(const TDesC& name);
  93. bool HasFolderSuffix(const TDesC& name);
  94. bool HasDriveOrRootPrefix(const TDesC& path);
  95. void EnsureFolderSuffix(TDes& des);
  96. HBufC* AllocFileUrlL(const TDesC& path);
  97. TFileName* AllocAppFolderPathL(const TDesC& path);
  98. TFileName* AllocFullPrefPathL(IHXPreferences* pPrefs, const char* prefKey);
  99. //
  100. // filetype
  101. //
  102. //FileType MimeToFileType(const TDataType& mimeType);
  103. bool IsNanoPlayerFileType(FileType type);
  104. bool IsNanoPlayerFileType(const TDesC& fullPath);
  105. bool IsNanoPlayerFileType(const TDesC& folderPath, const TDesC& itemName);
  106. bool IsValidFileName(const TDesC& name);
  107. FileNameValidity GetFileNameValidity(const TDesC& name);
  108. //
  109. // drive info
  110. //
  111. TInt GetDriveIndex(const TDesC& path);
  112. DriveInfo GetDriveInfo(TInt idxDrive);
  113. DriveInfo GetDriveInfo(const TDesC& path);
  114. bool IsDriveLocked(TInt idxDrive);
  115. //
  116. // filesystem helpers
  117. //
  118. TFileName* AllocUniqueDefaultNameL(const TDesC& basePath, 
  119.                                const TDesC& defaultName, 
  120.                                bool bWantFolder, const CHXAvNameDisplayTrait& nameTrait);
  121. bool PathExists(const TDesC& fullPath);
  122. TInt GetFullPath(RFs& fs, const TDesC& path, TDes& fullPath, bool bAllowWildCard = false);
  123. TInt CheckDiskSpaceForCopyL(const TDesC& fullPathSource, TInt idxDriveDest);
  124. CDesCArrayFlat* AllocFolderListL(const TDesC& parentPath, bool bSorted = true);
  125. TInt GetFileSize(const TDesC& fileName);
  126. TInt EnsureClearReadOnlyAttributeL(const TDesC& fileName);
  127. //
  128. // GetFolderChildCount
  129. //
  130. // filter prototype
  131. typedef bool (*PFNNanoPlayerFilterType)(const TDesC& folderPath, const TDesC& itemName);
  132. // filters for GetFolderChildCount
  133. bool FilterIncludeNanoPlayerFiles(const TDesC& folderPath, const TDesC& itemName);
  134. bool FilterIncludeNoFiles(const TDesC& folderPath, const TDesC& itemName);
  135. bool FilterIncludeAllFiles(const TDesC& folderPath, const TDesC& itemName);
  136. template <typename FileFilter>
  137. TInt GetFolderChildCount(const TDesC& folderPath, 
  138.  TInt& countOut, bool bWantFolders,
  139.                                  FileFilter isWantedFile);
  140. } // ns CHXAvFile
  141. namespace CHXAvFile
  142. {
  143. //
  144. //    inlines...
  145. //
  146. // GetFolderChildCount
  147. inline
  148. bool FilterIncludeNanoPlayerFiles(const TDesC& folderPath, const TDesC& itemName)
  149. {
  150.     return IsNanoPlayerFileType(folderPath, itemName);
  151. }
  152. // GetFolderChildCount
  153. inline
  154. bool FilterIncludeNoFiles(const TDesC& /*folderPath*/, const TDesC& /*itemName*/)
  155. {
  156.     return false;
  157. }
  158. // GetFolderChildCount
  159. inline
  160. bool FilterIncludeAllFiles(const TDesC& /*folderPath*/, const TDesC& /*itemName*/)
  161. {
  162.     return true;
  163. }
  164. ////////////////////////////////////////////////////////
  165. //
  166. inline
  167. bool IsValidFileName(const TDesC& name)
  168. {
  169.     return nvValid == GetFileNameValidity(name);
  170. }
  171. ////////////////////////////////////
  172. // return true if file type indicates a 'playable' file
  173. inline
  174. bool IsNanoPlayerFileType(FileType type)
  175. {
  176.     return type != ftFolder && type != ftUnknown;
  177. }
  178. ////////////////////////////////////////
  179. // return true if starts with a ''
  180. inline
  181. bool HasFolderPrefix(const TDesC& name)
  182. {
  183.     return (name.Length() > 0) && (name[0] == KPathDelimiter);
  184. }
  185. ////////////////////////////////////////
  186. // return true if ends with a ''
  187. inline
  188. bool HasFolderSuffix(const TDesC& name)
  189. {
  190.     return (name.Length() > 0) && (name[name.Length() - 1] == KPathDelimiter);
  191. }
  192. ////////////////////////////////////////
  193. // add trailing path delimiter if missing
  194. inline
  195. void EnsureFolderSuffix(TDes& des)
  196. {
  197.     if( !HasFolderSuffix(des) )
  198.     {
  199. des.Append(KPathDelimiter);
  200.     }
  201. }
  202. ////////////////////////////////////////
  203. // adjust descriptor
  204. inline
  205. void TrimFolderSuffix(TFileName* pPath)
  206. {
  207.     if(HasFolderSuffix(*pPath) )
  208.     {
  209.         pPath->SetLength(pPath->Length() - 1);
  210.     }
  211. }
  212. inline
  213. DriveInfo GetDriveInfo(const TDesC& path)
  214. {
  215.     return GetDriveInfo(GetDriveIndex(path));
  216. }
  217. ////////////////////////////////////////////////////
  218. //
  219. inline
  220. bool IsDriveLocked(TInt idxDrive)
  221. {
  222.     DriveInfo info = GetDriveInfo(idxDrive);
  223.     return info.state == dsLocked;
  224. }
  225. } // CHXAvFile
  226. #endif // EP_FILE_UTIL_INCLUDED