1 #pragma once
2 
3 #include <atlsimpcoll.h> // for CSimpleArray
4 
5 //////////////////////////////////////////////////////////////////////////////
6 
7 // A pathname with info
8 class CDirectoryItem
9 {
10 public:
11     CDirectoryItem() : m_pszPath(NULL)
12     {
13     }
14 
15     CDirectoryItem(LPCWSTR pszPath)
16     {
17         m_pszPath = _wcsdup(pszPath);
18     }
19 
20     CDirectoryItem(const CDirectoryItem& item)
21         : m_pszPath(_wcsdup(item.m_pszPath))
22     {
23     }
24 
25     CDirectoryItem& operator=(const CDirectoryItem& item)
26     {
27         if (this != &item)
28         {
29             free(m_pszPath);
30             m_pszPath = _wcsdup(item.m_pszPath);
31         }
32         return *this;
33     }
34 
35     ~CDirectoryItem()
36     {
37         free(m_pszPath);
38     }
39 
40     BOOL IsEmpty() const
41     {
42         return m_pszPath == NULL;
43     }
44 
45     LPCWSTR GetPath() const
46     {
47         return m_pszPath;
48     }
49 
50     void SetPath(LPCWSTR pszPath)
51     {
52         free(m_pszPath);
53         m_pszPath = _wcsdup(pszPath);
54     }
55 
56     BOOL EqualPath(LPCWSTR pszPath) const
57     {
58         return m_pszPath != NULL && lstrcmpiW(m_pszPath, pszPath) == 0;
59     }
60 
61 protected:
62     LPWSTR m_pszPath;    // A full path, malloc'ed
63 };
64 
65 // the directory list
66 class CDirectoryList
67 {
68 public:
69     CDirectoryList() : m_fRecursive(FALSE)
70     {
71     }
72 
73     CDirectoryList(LPCWSTR pszDirectoryPath, BOOL fRecursive)
74         : m_fRecursive(fRecursive)
75     {
76         AddPathsFromDirectory(pszDirectoryPath);
77     }
78 
79     BOOL ContainsPath(LPCWSTR pszPath) const;
80     BOOL AddPath(LPCWSTR pszPath);
81     BOOL AddPathsFromDirectory(LPCWSTR pszDirectoryPath);
82     BOOL RenamePath(LPCWSTR pszPath1, LPCWSTR pszPath2);
83     BOOL DeletePath(LPCWSTR pszPath);
84 
85     void RemoveAll()
86     {
87         m_items.RemoveAll();
88     }
89 
90 protected:
91     BOOL m_fRecursive;
92     CSimpleArray<CDirectoryItem> m_items;
93 };
94