00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037 #include "Poco/Path_WIN32.h"
00038 #include "Poco/Environment_WIN32.h"
00039 #include "Poco/UnWindows.h"
00040
00041
00042 namespace Poco {
00043
00044
00045 std::string PathImpl::currentImpl()
00046 {
00047 char buffer[_MAX_PATH];
00048 DWORD n = GetCurrentDirectoryA(sizeof(buffer), buffer);
00049 if (n > 0 && n < sizeof(buffer))
00050 {
00051 std::string result(buffer, n);
00052 if (result[n - 1] != '\\')
00053 result.append("\\");
00054 return result;
00055 }
00056 else throw SystemException("Cannot get current directory");
00057 }
00058
00059
00060 std::string PathImpl::homeImpl()
00061 {
00062 std::string result = EnvironmentImpl::getImpl("HOMEDRIVE");
00063 result.append(EnvironmentImpl::getImpl("HOMEPATH"));
00064 std::string::size_type n = result.size();
00065 if (n > 0 && result[n - 1] != '\\')
00066 result.append("\\");
00067 return result;
00068 }
00069
00070
00071 std::string PathImpl::tempImpl()
00072 {
00073 char buffer[_MAX_PATH];
00074 DWORD n = GetTempPathA(sizeof(buffer), buffer);
00075 if (n > 0 && n < sizeof(buffer))
00076 {
00077 std::string result(buffer, n);
00078 if (result[n - 1] != '\\')
00079 result.append("\\");
00080 return result;
00081 }
00082 else throw SystemException("Cannot get current directory");
00083 }
00084
00085
00086 std::string PathImpl::nullImpl()
00087 {
00088 return "NUL:";
00089 }
00090
00091
00092 std::string PathImpl::expandImpl(const std::string& path)
00093 {
00094 char buffer[_MAX_PATH];
00095 DWORD n = ExpandEnvironmentStringsA(path.c_str(), buffer, sizeof(buffer));
00096 if (n > 0 && n < sizeof(buffer))
00097 return std::string(buffer, n - 1);
00098 else
00099 return path;
00100 }
00101
00102
00103 void PathImpl::listRootsImpl(std::vector<std::string>& roots)
00104 {
00105 roots.clear();
00106 char buffer[128];
00107 DWORD n = GetLogicalDriveStrings(sizeof(buffer) - 1, buffer);
00108 char* it = buffer;
00109 char* end = buffer + (n > sizeof(buffer) ? sizeof(buffer) : n);
00110 while (it < end)
00111 {
00112 std::string dev;
00113 while (it < end && *it) dev += *it++;
00114 roots.push_back(dev);
00115 ++it;
00116 }
00117 }
00118
00119
00120 }