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

Symbian

开发平台:

Visual C++

  1. /*****************************************************************************
  2.  * chxavdirectoryreader.cpp
  3.  * ------------------------
  4.  *
  5.  * Synopsis:
  6.  * Makes locating files and sub-dirs within a dir a bit easier.
  7.  *
  8.  * Target:
  9.  * Symbian OS
  10.  *
  11.  *
  12.  * (c) 1995-2003 RealNetworks, Inc. Patents pending. All rights reserved.
  13.  *
  14.  *****************************************************************************/
  15. // Symbian includes... 
  16. #include <eikfutil.h>
  17. #include <f32file.h>
  18. // Helix includes...
  19. #include "hxtypes.h"
  20. #include "hxstring.h"
  21. // Includes fromt this project...
  22. #include "hxsym_debug.h"
  23. #include "chxavdirectoryreader.h"
  24. #include "chxavstringutils.h"
  25. CHXAvDirectoryReader::CHXAvDirectoryReader(RFs& rfs)
  26. : m_rfs(rfs)
  27. , m_pFileEntries(0)
  28. , m_pDirEntries(0)
  29. , m_lastError(KErrNone)
  30. , m_sortFlags(ESortByName | EAscending)
  31. , m_attributes(KEntryAttNormal) // | KEntryAttSystem | KEntryAttHidden;
  32. {
  33. }
  34. CHXAvDirectoryReader::~CHXAvDirectoryReader()
  35. {
  36.     HX_DELETE(m_pFileEntries);
  37.     HX_DELETE(m_pDirEntries);
  38. }
  39. ////////////////////////////////////////////////////////
  40. // if documents is a directory:
  41. //
  42. // documents     -> file list is empty, dir list contains 1 entry
  43. // documents     -> file list contains files; dir list contains child dirs
  44. // documents*     -> " "
  45. // documents*.rm  -> file list contains all .rm files; dir list is empty
  46. //
  47. // dir must have trailing back-slash to collect its contents; otherwise it
  48. // is interpreted as an entry (filename or dir)
  49. //
  50. //
  51. bool
  52. CHXAvDirectoryReader::SetToPath(const TDesC& path)
  53. {
  54.     _LIT(KWildcardText, "*");
  55.     bool bSuccess = false;
  56.     HX_DELETE(m_pFileEntries);
  57.     HX_DELETE(m_pDirEntries);
  58.     // check that the specified path is parseable
  59.     m_lastError = EikFileUtils::Parse(path);
  60.     if(KErrNone == m_lastError )
  61.     {
  62. m_path = path;
  63. // append wildcard if name component is missing (dir specified)
  64. TParse parsedPath;
  65. parsedPath.Set(m_path, NULL, NULL);
  66. if( !parsedPath.NamePresent() && m_path.Length() < KMaxFileName )
  67. {
  68.     m_path.Append(KWildcardText);
  69. }
  70. m_lastError = m_rfs.GetDir(m_path, m_attributes, m_sortFlags, m_pFileEntries, m_pDirEntries);
  71. bSuccess = (KErrNone == m_lastError);
  72.         if( bSuccess )
  73.         {
  74.             HX_ASSERT(m_pDirEntries);
  75.             BaflUtils::RemoveSystemDirectory(*m_pDirEntries);
  76.         }
  77.         
  78.     }
  79.     else
  80.     {
  81. CHXString str;
  82. CHXAvStringUtils::DesToString(path, str);
  83. DPRINTF(SYMP_FILE, ("CHXAvDirectoryReader::SetToPath(): bad path '%s'n", (const char*)str));
  84. str.GetLength();
  85.     }
  86.     
  87.     
  88.     return bSuccess;
  89. }
  90. ////////////////////////////////////////////////////////
  91. // descend from current directory to a child directory
  92. //
  93. // name must not start or end with '\'
  94. //
  95. bool CHXAvDirectoryReader::SetToChild(const TDesC& dir)
  96. {
  97.     TParse parsedPath;
  98.     parsedPath.Set(m_path, NULL, NULL);
  99.     parsedPath.AddDir(dir);
  100.     return SetToPath(parsedPath.FullName());
  101. }
  102. ////////////////////////////////////////////////////////
  103. // move up from current directory to parent directory
  104. //
  105. bool CHXAvDirectoryReader::SetToParent()
  106. {
  107.     TParse parsedPath;
  108.     parsedPath.Set(m_path, NULL, NULL);
  109.     parsedPath.PopDir();
  110.     return SetToPath(parsedPath.FullName());
  111. }