📄 propidutils.cpp
字号:
// PropIDUtils.cpp#include "StdAfx.h"#include "PropIDUtils.h"#include "Common/IntToString.h"#include "Common/StringConvert.h"#include "Windows/FileFind.h"#include "Windows/PropVariantConversions.h"#include "../../PropID.h"using namespace NWindows;static UString ConvertUInt32ToString(UInt32 value){ wchar_t buffer[32]; ConvertUInt64ToString(value, buffer); return buffer;}static void ConvertUInt32ToHex(UInt32 value, wchar_t *s){ for (int i = 0; i < 8; i++) { int t = value & 0xF; value >>= 4; s[7 - i] = (wchar_t)((t < 10) ? (L'0' + t) : (L'A' + (t - 10))); } s[8] = L'\0';}UString ConvertPropertyToString(const PROPVARIANT &propVariant, PROPID propID, bool full){ switch(propID) { case kpidCreationTime: case kpidLastWriteTime: case kpidLastAccessTime: { if (propVariant.vt != VT_FILETIME) return UString(); // It is error; FILETIME localFileTime; if (propVariant.filetime.dwHighDateTime == 0 && propVariant.filetime.dwLowDateTime == 0) return UString(); if (!::FileTimeToLocalFileTime(&propVariant.filetime, &localFileTime)) return UString(); // It is error; return ConvertFileTimeToString(localFileTime, true, full); } case kpidCRC: { if(propVariant.vt != VT_UI4) break; wchar_t temp[12]; ConvertUInt32ToHex(propVariant.ulVal, temp); return temp; } case kpidAttributes: { if(propVariant.vt != VT_UI4) break; UString result; UInt32 attributes = propVariant.ulVal; if (NFile::NFind::NAttributes::IsReadOnly(attributes)) result += L'R'; if (NFile::NFind::NAttributes::IsHidden(attributes)) result += L'H'; if (NFile::NFind::NAttributes::IsSystem(attributes)) result += L'S'; if (NFile::NFind::NAttributes::IsDirectory(attributes)) result += L'D'; if (NFile::NFind::NAttributes::IsArchived(attributes)) result += L'A'; if (NFile::NFind::NAttributes::IsCompressed(attributes)) result += L'C'; if (NFile::NFind::NAttributes::IsEncrypted(attributes)) result += L'E'; return result; } case kpidDictionarySize: { if(propVariant.vt != VT_UI4) break; UInt32 size = propVariant.ulVal; if (size % (1 << 20) == 0) return ConvertUInt32ToString(size >> 20) + L"MB"; if (size % (1 << 10) == 0) return ConvertUInt32ToString(size >> 10) + L"KB"; return ConvertUInt32ToString(size); } } return ConvertPropVariantToString(propVariant);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -