Fennel: /home/pub/open/dev/fennel/common/FileSystem.cpp Source File (original) (raw)
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 #define EXTENSIONS 00026 00027 #include "fennel/common/CommonPreamble.h" 00028 #include "fennel/common/FileSystem.h" 00029 00030 #ifdef MSVC 00031 #include <io.h> 00032 #define S_IRUSR S_IREAD 00033 #define S_IWUSR S_IWRITE 00034 typedef int mode_t; 00035 #else 00036 #include <unistd.h> 00037 #endif 00038 #include <sys/types.h> 00039 #include <sys/stat.h> 00040 #ifdef MSVC 00041 #include "fennel/common/FennelResource.h" 00042 #else 00043 #include <sys/statvfs.h> 00044 #endif 00045 #include <fcntl.h> 00046 #include "fennel/common/SysCallExcn.h" 00047 #include 00048 00049 FENNEL_BEGIN_CPPFILE("$Id: //open/dev/fennel/common/FileSystem.cpp#10 $"); 00050 00051 void FileSystem::remove(char const *fileName) 00052 { 00053 if (doesFileExist(fileName)) { 00054 setFileAttributes(fileName,0); 00055 if (::unlink(fileName)) { 00056 std::ostringstream oss; 00057 oss << "Failed to remove file " << fileName; 00058 throw SysCallExcn(oss.str()); 00059 } 00060 } 00061 } 00062 00063 bool FileSystem::doesFileExist(char const *filename) 00064 { 00065 return !::access(filename,0); 00066 } 00067 00068 bool FileSystem::setFileAttributes(char const *filename,bool readOnly) 00069 { 00070 mode_t mode = S_IRUSR; 00071 if (!readOnly) { 00072 mode |= S_IWUSR; 00073 } 00074 return ::chmod(filename,mode) ? 0 : 1; 00075 } 00076 00077 void FileSystem::getDiskFreeSpace(char const *path, FileSize &availableSpace) 00078 { 00079 #ifdef MSVC 00080 throw FennelExcn(FennelResource::instance().unsupportedOperation("statvfs")); 00081 #else 00082 struct statvfs buf; 00083 int rc = statvfs(path, &buf); 00084 if (rc == -1) { 00085 throw SysCallExcn("statvfs call failed"); 00086 } 00087 availableSpace = buf.f_bsize * buf.f_bavail; 00088 #endif 00089 } 00090 00091 FENNEL_END_CPPFILE("$Id: //open/dev/fennel/common/FileSystem.cpp#10 $"); 00092 00093