Skip to content
Snippets Groups Projects
Commit 5dda8f4a authored by Ivan Dokunov's avatar Ivan Dokunov
Browse files

Refactor & BugFix iterator

parent 97eeead5
No related branches found
No related tags found
No related merge requests found
......@@ -23,6 +23,11 @@ const char *CFileExtIterator::next()
//Сохраняем HANDLE файла, что бы можно было продожлить с того места
m_handle = hf;
if (!strcmp(FindFileData.cFileName, ".."))
{
continue;
}
m_pathStr = m_szPath + "/" + FindFileData.cFileName;
//Возвращаем полный путь, вместе с именем файла и расширением
......
/***********************************************************
Copyright © Vitaliy Buturlin, Evgeny Danilovich, Ivan Dokunov, 2019
See the license in LICENSE
***********************************************************/
#ifndef __FILE_EXT_ITERATOR_H
#define __FILE_EXT_ITERATOR_H
......
......@@ -6,6 +6,23 @@
#include <shellapi.h>
#include <ShlObj.h>
bool CFileSystem::isFileOrDirectory(const char *szPath, bool isFile)
{
char* path = getAbsoliteCanonizePath(szPath);
if (!path)
{
return false;
}
DWORD flag = GetFileAttributes(path);
mem_delete_a(path);
//Проверка на то куда имено ведет путь - к файлу или папке
return (flag != INVALID_FILE_ATTRIBUTES) && (isFile ? !(flag & FILE_ATTRIBUTE_DIRECTORY) : (flag & FILE_ATTRIBUTE_DIRECTORY));
}
Array<String>* CFileSystem::getAllvariantsCanonizePath(const char *szPath)
{
Array<String>* paths = new Array<String>();
......@@ -288,36 +305,12 @@ size_t CFileSystem::fileGetSize(const char *szPath)
bool CFileSystem::isFile(const char *szPath)
{
char* path = getAbsoliteCanonizePath(szPath);
if (!path)
{
return false;
}
DWORD flag = GetFileAttributes(path);
mem_delete_a(path);
//Если не существует или указанный путь ведет не к файлу
return (flag != INVALID_FILE_ATTRIBUTES) && !(flag & FILE_ATTRIBUTE_DIRECTORY);
return isFileOrDirectory(szPath, true);
}
bool CFileSystem::isDirectory(const char *szPath)
{
char* path = getAbsoliteCanonizePath(szPath);
if (!path)
{
return false;
}
DWORD flag = GetFileAttributes(path);
mem_delete_a(path);
//Если не существует или указанный путь ведет не к каталогу
return (flag != INVALID_FILE_ATTRIBUTES) && (flag & FILE_ATTRIBUTE_DIRECTORY);
return isFileOrDirectory(szPath, false);
}
time_t CFileSystem::getFileModifyTime(const char *szPath)
......
......@@ -81,6 +81,9 @@ public:
IFile *openFile(const char *szPath, FILE_OPEN_MODE) override;
private:
//! Метод делает проверку, ведет ли путь к файлу или папке
bool isFileOrDirectory(const char *szPath, bool isFile);
Array<String>* getAllvariantsCanonizePath(const char *szPath);
//!Превращает канонизированный путь в неканонизированный
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment