diff options
author | Dennis Syrovatsky <dennis@tightvnc.com> | 2005-10-19 07:46:31 +0000 |
---|---|---|
committer | Dennis Syrovatsky <dennis@tightvnc.com> | 2005-10-19 07:46:31 +0000 |
commit | 84ea20fbd67d760b1fb214cb4413258ecf8b24bd (patch) | |
tree | 6df699679069c28d40473bb31e946a3ddfd77244 /rfb_win32 | |
parent | 514c3073848d84131555d41793b31ab780ce5b76 (diff) | |
download | tigervnc-84ea20fbd67d760b1fb214cb4413258ecf8b24bd.tar.gz tigervnc-84ea20fbd67d760b1fb214cb4413258ecf8b24bd.zip |
Added getFolderInfo and getDrivesInfo methods to FolderManager class.
git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@353 3789f03b-4d11-0410-bbf8-ca57d06f2519
Diffstat (limited to 'rfb_win32')
-rw-r--r-- | rfb_win32/FolderManager.cxx | 56 | ||||
-rw-r--r-- | rfb_win32/FolderManager.h | 3 |
2 files changed, 56 insertions, 3 deletions
diff --git a/rfb_win32/FolderManager.cxx b/rfb_win32/FolderManager.cxx index 98f70961..7cba7b51 100644 --- a/rfb_win32/FolderManager.cxx +++ b/rfb_win32/FolderManager.cxx @@ -59,7 +59,59 @@ FolderManager::deleteDir(char *pFullPath) } bool -FolderManager::getDirInfo(char *pPath, FileInfo *pFileInfo, unsigned int dirOnly) +FolderManager::getFolderInfo(char *pPath, FileInfo *pFileInfo, unsigned int dirOnly) { - return false; + if (strlen(pPath) == 0) return getDrivesInfo(pFileInfo); + + char path[FT_FILENAME_SIZE]; + sprintf(path, "%s\\*", pPath); + + WIN32_FIND_DATA FindFileData; + SetErrorMode(SEM_FAILCRITICALERRORS); + HANDLE handle = FindFirstFile(path, &FindFileData); + DWORD lastError = GetLastError(); + SetErrorMode(0); + + if (handle != INVALID_HANDLE_VALUE) { + do { + if (strcmp(FindFileData.cFileName, ".") != 0 && + strcmp(FindFileData.cFileName, "..") != 0) { + LARGE_INTEGER li; + li.LowPart = FindFileData.ftLastWriteTime.dwLowDateTime; + li.HighPart = FindFileData.ftLastWriteTime.dwHighDateTime; + li.QuadPart = (li.QuadPart - 116444736000000000) / 10000000; + if ((FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) { + pFileInfo->add(FindFileData.cFileName, 0, li.LowPart, FT_ATTR_FOLDER); + } else { + if (!dirOnly) + pFileInfo->add(FindFileData.cFileName, FindFileData.nFileSizeLow, li.LowPart, FT_ATTR_FILE); + } + } + + } while (FindNextFile(handle, &FindFileData)); + } else { + return false; + } + FindClose(handle); + return true; +} + +bool +FolderManager::getDrivesInfo(FileInfo *pFileInfo) +{ + TCHAR szDrivesList[256]; + if (GetLogicalDriveStrings(255, szDrivesList) == 0) + return false; + + int i = 0; + while (szDrivesList[i] != '\0') { + char *drive = strdup(&szDrivesList[i]); + char *backslash = strrchr(drive, '\\'); + if (backslash != NULL) + *backslash = '\0'; + pFileInfo->add(drive, 0, 0, FT_ATTR_FOLDER); + free(drive); + i += strcspn(&szDrivesList[i], "\0") + 1; + } + return true; } diff --git a/rfb_win32/FolderManager.h b/rfb_win32/FolderManager.h index ad23c3de..15aa238f 100644 --- a/rfb_win32/FolderManager.h +++ b/rfb_win32/FolderManager.h @@ -40,7 +40,8 @@ namespace rfb { bool renameDir(char *pOldName, char *pNewName); bool deleteDir(char *pFullPath); - bool getDirInfo(char *pPath, FileInfo *pFileInfo, unsigned int dirOnly); + bool getFolderInfo(char *pPath, FileInfo *pFileInfo, unsigned int dirOnly); + bool getDrivesInfo(FileInfo *pFI); }; } } |