...
 
Commits (2)
......@@ -37,6 +37,7 @@
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\source\core\DirIterator.cpp" />
<ClCompile Include="..\..\..\source\core\file.cpp" />
<ClCompile Include="..\..\..\source\core\FileExtsIterator.cpp" />
<ClCompile Include="..\..\..\source\core\FileInMemory.cpp" />
......@@ -70,6 +71,7 @@
</ClInclude>
<ClInclude Include="..\..\..\source\common\string_utils.h" />
<ClInclude Include="..\..\..\source\core\AsyncFileReader.h" />
<ClInclude Include="..\..\..\source\core\DirIterator.h" />
<ClInclude Include="..\..\..\source\core\FileExtsIterator.h" />
<ClInclude Include="..\..\..\source\core\FileInMemory.h" />
<ClInclude Include="..\..\..\source\core\concmd.h" />
......
......@@ -79,6 +79,9 @@
<ClCompile Include="..\..\..\source\core\FileExtsIterator.cpp">
<Filter>Source</Filter>
</ClCompile>
<ClCompile Include="..\..\..\source\core\DirIterator.cpp">
<Filter>Source</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<Filter Include="Source">
......@@ -224,5 +227,8 @@
<ClInclude Include="..\..\..\source\core\FileExtsIterator.h">
<Filter>Header</Filter>
</ClInclude>
<ClInclude Include="..\..\..\source\core\DirIterator.h">
<Filter>Header</Filter>
</ClInclude>
</ItemGroup>
</Project>
\ No newline at end of file
#include "DirIterator.h"
CDirIterator::CDirIterator(const char *szPath)
: m_sPath(szPath)
{}
const char *CDirIterator::next()
{
WIN32_FIND_DATA FindFileData;
HANDLE hf;
//Проверяем указатель, если m_handle пустой, то ищем первый файл с расширением szExts
hf = INVALID_OR_NULL(m_handle) ? FindFirstFile(m_sPath.c_str(), &FindFileData) : m_handle;
if (hf != INVALID_HANDLE_VALUE)
{
while (FindNextFile(hf, &FindFileData) != 0)
{
//Если это папка - то записывает handle и возвращаем путь к папке
if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
m_handle = hf;
return (m_sPath + "\\" + FindFileData.cFileName).c_str();
}
}
}
return nullptr;
}
void CDirIterator::reset()
{
CLOSE_HANDLE(m_handle);
}
CDirIterator ::~CDirIterator()
{
CLOSE_HANDLE(m_handle);
}
#ifndef __DIRECTORY_ITERATOR_H
#define __DIRECTORY_ITERATOR_H
#include "FileSystem.h"
#define INVALID_OR_NULL(handle) handle == nullptr || handle == INVALID_HANDLE_VALUE
class CDirIterator final : public IFileSystem::IFileIterator
{
private:
String m_sPath;
HANDLE m_handle = nullptr;
public:
CDirIterator(const char *szPath);
const char *XMETHODCALLTYPE next() override;
void XMETHODCALLTYPE reset() override;
~CDirIterator();
};
#endif
\ No newline at end of file
#include "FileSystem.h"
#include "FileExtIterator.h"
#include "FileExtsIterator.h"
#include "DirIterator.h"
#include <shellapi.h>
#include <ShlObj.h>
......@@ -115,10 +116,9 @@ time_t CFileSystem::getFileModifyTime(const char *szPath)
return convertFiletimeToTime_t(mTime);
}
IFileSystem::IFileIterator *CFileSystem::getFolderList()
IFileSystem::IFileIterator *CFileSystem::getFolderList(const char *szPath)
{
assert(!"No Implementation");
return nullptr;
return new CDirIterator(szPath);
}
IFileSystem::IFileIterator *CFileSystem::getFileList(const char *szPath, const char *szExt)
......
......@@ -54,8 +54,7 @@ public:
//! Данная функция возвращает время в UTC (Coordinated Universal Time)
time_t getFileModifyTime(const char *szPath) override;
//! No implementation
IFileIterator *getFolderList() override;
IFileIterator *getFolderList(const char *szPath) override;
IFileIterator *getFileList(const char *szPath, const char *szExt = 0) override;
......
......@@ -74,7 +74,7 @@ public:
};
//! Возвращает список всех папок
virtual IFileIterator *getFolderList() = 0;
virtual IFileIterator *getFolderList(const char *szPath) = 0;
/*! возвращает массив со всеми данными находящимися по пути szPath,
szPath может быть не канонизирован и необязательно должен заканчиваться слэшем,
......