BOOL CMainDialog::OnInitDialog(void) { __super::OnInitDialog(); // set dialog's icons SetIcon(m_hIcon, TRUE); SetIcon(m_hSmIcon, FALSE); // get our path name - we assume that crashed exe is in same directory ZeroMemory(m_szModulePath, sizeof(m_szModulePath)); ::GetModuleFileName(NULL, m_szModulePath, _countof(m_szModulePath) - 2); TCHAR *cp = _tcsrchr(m_szModulePath, _T('\\')); if (*cp) { *(cp + 1) = _T('\0'); // remove file name } InitializeDisplay(); GetRegistryDetails(); GetFileDetails(); m_nFilesInZip = ZipFiles(); LoadHandCursor(); SetTimer(1, 80, NULL); // initialized return (TRUE); }
// Returns file attributes. bool GetFileDetails(const std::string &filename, FileDetails *details) { #ifdef _WIN32 WIN32_FILE_ATTRIBUTE_DATA attr; if (!GetFileAttributesEx(ConvertUTF8ToWString(filename).c_str(), GetFileExInfoStandard, &attr)) return false; details->isDirectory = (attr.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0; details->size = ((u64)attr.nFileSizeHigh << 32) | (u64)attr.nFileSizeLow; details->atime = FiletimeToStatTime(attr.ftLastAccessTime); details->mtime = FiletimeToStatTime(attr.ftLastWriteTime); details->ctime = FiletimeToStatTime(attr.ftCreationTime); if (attr.dwFileAttributes & FILE_ATTRIBUTE_READONLY) { details->access = 0444; // Read } else { details->access = 0666; // Read/Write } if (attr.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { details->access |= 0111; // Execute } return true; #else if (!Exists(filename)) { return false; } #if __ANDROID__ && __ANDROID_API__ < 21 struct stat buf; if (stat(filename.c_str(), &buf) == 0) { #else struct stat64 buf; if (stat64(filename.c_str(), &buf) == 0) { #endif details->size = buf.st_size; details->isDirectory = S_ISDIR(buf.st_mode); details->atime = buf.st_atime; details->mtime = buf.st_mtime; details->ctime = buf.st_ctime; details->access = buf.st_mode & 0x1ff; return true; } else { return false; } #endif } bool GetModifTime(const std::string &filename, tm &return_time) { memset(&return_time, 0, sizeof(return_time)); FileDetails details; if (GetFileDetails(filename, &details)) { time_t t = details.mtime; localtime_r((time_t*)&t, &return_time); return true; } else { return false; } }
bool GetModifTime(const std::string &filename, tm &return_time) { memset(&return_time, 0, sizeof(return_time)); FileDetails details; if (GetFileDetails(filename, &details)) { time_t t = details.mtime; localtime_r((time_t*)&t, &return_time); return true; } else { return false; } }