Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision
Loading items

Target

Select target project
  • sip/engine
  • yura9889/engine
2 results
Select Git revision
Loading items
Show changes

Commits on Source 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 может быть не канонизирован и необязательно должен заканчиваться слэшем,
......