Implement agi::util::freespace for Windows

Originally committed to SVN as r5497.
This commit is contained in:
Thomas Goyne 2011-07-26 19:51:07 +00:00
parent 6f22088b06
commit 231adad93f
3 changed files with 16 additions and 2 deletions

View File

@ -65,7 +65,7 @@ namespace agi {
/// Check for amount of free space on a Path. /// Check for amount of free space on a Path.
// @param path[in] Path to check // @param path[in] Path to check
// @param type PathType (default is TypeDir) // @param type PathType (default is TypeDir)
uint64_t freespace(std::string &path, PathType type=TypeDir); uint64_t freespace(std::string const& path, PathType type=TypeDir);
struct delete_ptr { struct delete_ptr {
template<class T> template<class T>

View File

@ -66,7 +66,7 @@ void time_log(timeval &tv) {
gettimeofday(&tv, (struct timezone *)NULL); gettimeofday(&tv, (struct timezone *)NULL);
} }
uint64_t freespace(std::string &path, PathType type) { uint64_t freespace(std::string const& path, PathType type) {
struct statvfs fs; struct statvfs fs;
std::string check(path); std::string check(path);

View File

@ -111,5 +111,19 @@ void time_log(agi_timeval &tv) {
tv.tv_usec = (long)(tmpres % 1000000UL); tv.tv_usec = (long)(tmpres % 1000000UL);
} }
uint64_t freespace(std::string const& path, PathType type) {
if (type == TypeFile)
return freespace(DirName(path));
ULARGE_INTEGER bytes_available;
if (GetDiskFreeSpaceEx(ConvertW(path).c_str(), &bytes_available, 0, 0))
return bytes_available.QuadPart;
acs::CheckDirRead(path);
/// @todo GetLastError -> Exception mapping
throw "Unknown error getting free space";
}
} // namespace io } // namespace io
} // namespace agi } // namespace agi