BOOL FindNextFile(HANDLE hHandle, LPWIN32_FIND_DATA lpFindData) { if (lpFindData == NULL || hHandle == NULL || hHandle->GetType() != CXHandle::HND_FIND_FILE) return FALSE; if ((unsigned int) hHandle->m_nFindFileIterator >= hHandle->m_FindFileResults.size()) return FALSE; CStdString strFileName = hHandle->m_FindFileResults[hHandle->m_nFindFileIterator++]; CStdString strFileNameTest = hHandle->m_FindFileDir + strFileName; if (IsAliasShortcut(strFileNameTest)) TranslateAliasShortcut(strFileNameTest); struct stat64 fileStat; memset(&fileStat, 0, sizeof(fileStat)); if (stat64(strFileNameTest, &fileStat) == -1) return FALSE; bool bIsDir = false; if (S_ISDIR(fileStat.st_mode)) { bIsDir = true; } memset(lpFindData,0,sizeof(WIN32_FIND_DATA)); lpFindData->dwFileAttributes = FILE_ATTRIBUTE_NORMAL; strcpy(lpFindData->cFileName, strFileName.c_str()); if (bIsDir) lpFindData->dwFileAttributes |= FILE_ATTRIBUTE_DIRECTORY; if (strFileName[0] == '.') lpFindData->dwFileAttributes |= FILE_ATTRIBUTE_HIDDEN; if (access(strFileName, R_OK) == 0 && access(strFileName, W_OK) != 0) lpFindData->dwFileAttributes |= FILE_ATTRIBUTE_READONLY; TimeTToFileTime(fileStat.st_ctime, &lpFindData->ftCreationTime); TimeTToFileTime(fileStat.st_atime, &lpFindData->ftLastAccessTime); TimeTToFileTime(fileStat.st_mtime, &lpFindData->ftLastWriteTime); lpFindData->nFileSizeHigh = (DWORD)(fileStat.st_size >> 32); lpFindData->nFileSizeLow = (DWORD)fileStat.st_size; return TRUE; }
BOOL WINAPI GetThreadTimes ( HANDLE hThread, LPFILETIME lpCreationTime, LPFILETIME lpExitTime, LPFILETIME lpKernelTime, LPFILETIME lpUserTime ) { if (!hThread) return false; if (!hThread->m_threadValid) return false; if (hThread == (HANDLE)-1) { if (lpCreationTime) TimeTToFileTime(0,lpCreationTime); if (lpExitTime) TimeTToFileTime(time(NULL),lpExitTime); if (lpKernelTime) TimeTToFileTime(0,lpKernelTime); if (lpUserTime) TimeTToFileTime(0,lpUserTime); return true; } if (lpCreationTime) TimeTToFileTime(hThread->m_tmCreation,lpCreationTime); if (lpExitTime) TimeTToFileTime(time(NULL),lpExitTime); if (lpKernelTime) TimeTToFileTime(0,lpKernelTime); #ifdef __APPLE__ thread_info_data_t threadInfo; mach_msg_type_number_t threadInfoCount = THREAD_INFO_MAX; if (hThread->m_machThreadPort == MACH_PORT_NULL) hThread->m_machThreadPort = pthread_mach_thread_np(hThread->m_hThread); kern_return_t ret = thread_info(hThread->m_machThreadPort, THREAD_BASIC_INFO, (thread_info_t)threadInfo, &threadInfoCount); if (ret == KERN_SUCCESS) { thread_basic_info_t threadBasicInfo = (thread_basic_info_t)threadInfo; if (lpUserTime) { // User time. unsigned long long time = ((__int64)threadBasicInfo->user_time.seconds * 10000000L) + threadBasicInfo->user_time.microseconds*10L; lpUserTime->dwLowDateTime = (time & 0xFFFFFFFF); lpUserTime->dwHighDateTime = (time >> 32); } if (lpKernelTime) { // System time. unsigned long long time = ((__int64)threadBasicInfo->system_time.seconds * 10000000L) + threadBasicInfo->system_time.microseconds*10L; lpKernelTime->dwLowDateTime = (time & 0xFFFFFFFF); lpKernelTime->dwHighDateTime = (time >> 32); } }
void GetSystemTimeAsFileTime(LPFILETIME lpSystemTimeAsFileTime) { TimeTToFileTime(time(NULL), lpSystemTimeAsFileTime); }