Source code

Revision control

Copy as Markdown

Other Tools

// DirItem.h↩
#ifndef __DIR_ITEM_H↩
#define __DIR_ITEM_H↩
#include "../../../Common/MyString.h"
#include "../../../Windows/FileFind.h"
#include "../../Common/UniqBlocks.h"
#include "../../Archive/IArchive.h"
struct CDirItemsStat↩
{↩
UInt64 NumDirs;↩
UInt64 NumFiles;↩
UInt64 NumAltStreams;↩
UInt64 FilesSize;↩
UInt64 AltStreamsSize;↩
UInt64 NumErrors;↩
// UInt64 Get_NumItems() const { return NumDirs + NumFiles + NumAltStreams; }↩
UInt64 Get_NumDataItems() const { return NumFiles + NumAltStreams; }↩
UInt64 GetTotalBytes() const { return FilesSize + AltStreamsSize; }↩
bool IsEmpty() const { return
0 == NumDirs↩
&& 0 == NumFiles↩
&& 0 == NumAltStreams↩
&& 0 == FilesSize↩
&& 0 == AltStreamsSize↩
&& 0 == NumErrors; }↩
CDirItemsStat():↩
NumDirs(0),↩
NumFiles(0),↩
NumAltStreams(0),↩
FilesSize(0),↩
AltStreamsSize(0),↩
NumErrors(0)↩
{}↩
};↩
struct CDirItemsStat2: public CDirItemsStat↩
{↩
UInt64 Anti_NumDirs;↩
UInt64 Anti_NumFiles;↩
UInt64 Anti_NumAltStreams;↩
// UInt64 Get_NumItems() const { return Anti_NumDirs + Anti_NumFiles + Anti_NumAltStreams + CDirItemsStat::Get_NumItems(); }↩
UInt64 Get_NumDataItems2() const { return Anti_NumFiles + Anti_NumAltStreams + CDirItemsStat::Get_NumDataItems(); }↩
bool IsEmpty() const { return CDirItemsStat::IsEmpty()↩
&& 0 == Anti_NumDirs↩
&& 0 == Anti_NumFiles↩
&& 0 == Anti_NumAltStreams; }↩
CDirItemsStat2():↩
Anti_NumDirs(0),↩
Anti_NumFiles(0),↩
Anti_NumAltStreams(0)↩
{}↩
};↩
#define INTERFACE_IDirItemsCallback(x) \↩
virtual HRESULT ScanError(const FString &path, DWORD systemError) x; \↩
virtual HRESULT ScanProgress(const CDirItemsStat &st, const FString &path, bool isDir) x; \↩
struct IDirItemsCallback↩
{↩
INTERFACE_IDirItemsCallback(=0)↩
};↩
struct CDirItem↩
{↩
UInt64 Size;↩
FILETIME CTime;↩
FILETIME ATime;↩
FILETIME MTime;↩
UString Name;↩
#if defined(_WIN32) && !defined(UNDER_CE)↩
// UString ShortName;↩
CByteBuffer ReparseData;↩
CByteBuffer ReparseData2; // fixed (reduced) absolute links↩
bool AreReparseData() const { return ReparseData.Size() != 0 || ReparseData2.Size() != 0; }↩
#endif
UInt32 Attrib;↩
int PhyParent;↩
int LogParent;↩
int SecureIndex;↩
bool IsAltStream;↩
CDirItem(): PhyParent(-1), LogParent(-1), SecureIndex(-1), IsAltStream(false) {}↩
bool IsDir() const { return (Attrib & FILE_ATTRIBUTE_DIRECTORY) != 0 ; }↩
};↩
class CDirItems↩
{↩
UStringVector Prefixes;↩
CIntVector PhyParents;↩
CIntVector LogParents;↩
UString GetPrefixesPath(const CIntVector &parents, int index, const UString &name) const;↩
HRESULT EnumerateDir(int phyParent, int logParent, const FString &phyPrefix);↩
public:↩
CObjectVector<CDirItem> Items;↩
bool SymLinks;↩
bool ScanAltStreams;↩
CDirItemsStat Stat;↩
#ifndef UNDER_CE↩
HRESULT SetLinkInfo(CDirItem &dirItem, const NWindows::NFile::NFind::CFileInfo &fi,↩
const FString &phyPrefix);↩
#endif
#if defined(_WIN32) && !defined(UNDER_CE)↩
CUniqBlocks SecureBlocks;↩
CByteBuffer TempSecureBuf;↩
bool _saclEnabled;↩
bool ReadSecure;↩
HRESULT AddSecurityItem(const FString &path, int &secureIndex);↩
#endif
IDirItemsCallback *Callback;↩
CDirItems();↩
void AddDirFileInfo(int phyParent, int logParent, int secureIndex,↩
const NWindows::NFile::NFind::CFileInfo &fi);↩
HRESULT AddError(const FString &path, DWORD errorCode);↩
HRESULT AddError(const FString &path);↩
HRESULT ScanProgress(const FString &path);↩
// unsigned GetNumFolders() const { return Prefixes.Size(); }↩
FString GetPhyPath(unsigned index) const;↩
UString GetLogPath(unsigned index) const;↩
unsigned AddPrefix(int phyParent, int logParent, const UString &prefix);↩
void DeleteLastPrefix();↩
HRESULT EnumerateItems2(↩
const FString &phyPrefix,↩
const UString &logPrefix,↩
const FStringVector &filePaths,↩
FStringVector *requestedPaths);↩
#if defined(_WIN32) && !defined(UNDER_CE)↩
void FillFixedReparse();↩
#endif
void ReserveDown();↩
};↩
struct CArcItem↩
{↩
UInt64 Size;↩
FILETIME MTime;↩
UString Name;↩
bool IsDir;↩
bool IsAltStream;↩
bool SizeDefined;↩
bool MTimeDefined;↩
bool Censored;↩
UInt32 IndexInServer;↩
int TimeType;↩
CArcItem(): IsDir(false), IsAltStream(false), SizeDefined(false), MTimeDefined(false), Censored(false), TimeType(-1) {}↩
};↩
#endif