// Common/C_FileIO.cpp #include "C_FileIO.h" #include <fcntl.h> #ifdef _WIN32 #include <io.h> #else #include <unistd.h> #endif namespace NC { namespace NFile { namespace NIO { bool CFileBase::OpenBinary(const char *name, int flags) { #ifdef O_BINARY flags |= O_BINARY; #endif Close(); _handle = ::open(name, flags, 0666); return _handle != -1; } bool CFileBase::Close() { if (_handle == -1) return true; if (close(_handle) != 0) return false; _handle = -1; return true; } bool CFileBase::GetLength(UInt64 &length) const { off_t curPos = Seek(0, SEEK_CUR); off_t lengthTemp = Seek(0, SEEK_END); Seek(curPos, SEEK_SET); length = (UInt64)lengthTemp; return true; } off_t CFileBase::Seek(off_t distanceToMove, int moveMethod) const { return ::lseek(_handle, distanceToMove, moveMethod); } ///////////////////////// // CInFile bool CInFile::Open(const char *name) { return CFileBase::OpenBinary(name, O_RDONLY); } bool CInFile::OpenShared(const char *name, bool) { return Open(name); } ssize_t CInFile::Read(void *data, size_t size) { return read(_handle, data, size); } ///////////////////////// // COutFile bool COutFile::Create(const char *name, bool createAlways) { if (createAlways) { Close(); _handle = ::creat(name, 0666); return _handle != -1; } return OpenBinary(name, O_CREAT | O_EXCL | O_WRONLY); } bool COutFile::Open(const char *name, DWORD creationDisposition) { return Create(name, false); } ssize_t COutFile::Write(const void *data, size_t size) { return write(_handle, data, size); } }}}