#ifdef _WIN32 #include #include #else #include #endif #include #include #include #include "uniFile.h" #include "stl/stringUtils.h" using namespace std; using namespace stringUtil; FILE* uniFile::fopen(const uniFile::filenameType &f,const char *mode) throw() { #ifdef _WIN32 uniString::utf32 u32(f); std::wstring u16; u32.toUtf16(u16); return _wfopen(u16.c_str(),tows(mode).c_str()); #else return ::fopen((const char *)f.c_str(),mode); #endif } void uniFile::unlink(const uniFile::filenameType &f) throw() { #ifdef _WIN32 uniString::utf32 u32(f); std::wstring u16; u32.toUtf16(u16); ::DeleteFileW(u16.c_str()); #else ::unlink((const char *)f.c_str()); #endif } bool uniFile::fileExists(const uniFile::filenameType &f) throw() { #ifdef _WIN32 uniString::utf32 u32(f); std::wstring u16; u32.toUtf16(u16); struct _stat64i32 st = {0}; int result = _wstat(u16.c_str(),&st); if (st.st_mode & _S_IFDIR) return 0; return (result == 0); #else struct stat st; int result = stat((const char *)f.c_str(),&st); if (S_ISDIR(st.st_mode)) return 0; return (result == 0); #endif } size_t uniFile::fileSize(const uniFile::filenameType &f) throw() { #ifdef _WIN32 uniString::utf32 u32(f); std::wstring u16; u32.toUtf16(u16); struct _stat64i32 st; if (_wstat(u16.c_str(),&st) == -1) return 0; return st.st_size; #else struct stat st; if (stat((const char *)f.c_str(),&st) == -1) return 0; return st.st_size; #endif } time_t uniFile::fileTime(const uniFile::filenameType &f) throw() { #ifdef _WIN32 uniString::utf32 u32(f); std::wstring u16; u32.toUtf16(u16); struct _stat64i32 st; if (_wstat(u16.c_str(),&st) == -1) return 0; return st.st_mtime; #else struct stat st; if (stat((const char *)f.c_str(),&st) == -1) return 0; return st.st_mtime; #endif }