1 // Common/C_FileIO.cpp
2
3 #include "C_FileIO.h"
4
5 #include <fcntl.h>
6 #ifdef _WIN32
7 #include <io.h>
8 #else
9 #include <unistd.h>
10 #endif
11
12 namespace NC {
13 namespace NFile {
14 namespace NIO {
15
OpenBinary(const char * name,int flags)16 bool CFileBase::OpenBinary(const char *name, int flags)
17 {
18 #ifdef O_BINARY
19 flags |= O_BINARY;
20 #endif
21 Close();
22 _handle = ::open(name, flags, 0666);
23 return _handle != -1;
24 }
25
Close()26 bool CFileBase::Close()
27 {
28 if (_handle == -1)
29 return true;
30 if (close(_handle) != 0)
31 return false;
32 _handle = -1;
33 return true;
34 }
35
GetLength(UInt64 & length) const36 bool CFileBase::GetLength(UInt64 &length) const
37 {
38 off_t curPos = Seek(0, SEEK_CUR);
39 off_t lengthTemp = Seek(0, SEEK_END);
40 Seek(curPos, SEEK_SET);
41 length = (UInt64)lengthTemp;
42 return true;
43 }
44
Seek(off_t distanceToMove,int moveMethod) const45 off_t CFileBase::Seek(off_t distanceToMove, int moveMethod) const
46 {
47 return ::lseek(_handle, distanceToMove, moveMethod);
48 }
49
50 /////////////////////////
51 // CInFile
52
Open(const char * name)53 bool CInFile::Open(const char *name)
54 {
55 return CFileBase::OpenBinary(name, O_RDONLY);
56 }
57
OpenShared(const char * name,bool)58 bool CInFile::OpenShared(const char *name, bool)
59 {
60 return Open(name);
61 }
62
Read(void * data,size_t size)63 ssize_t CInFile::Read(void *data, size_t size)
64 {
65 return read(_handle, data, size);
66 }
67
68 /////////////////////////
69 // COutFile
70
Create(const char * name,bool createAlways)71 bool COutFile::Create(const char *name, bool createAlways)
72 {
73 if (createAlways)
74 {
75 Close();
76 _handle = ::creat(name, 0666);
77 return _handle != -1;
78 }
79 return OpenBinary(name, O_CREAT | O_EXCL | O_WRONLY);
80 }
81
Open(const char * name,DWORD creationDisposition)82 bool COutFile::Open(const char *name, DWORD creationDisposition)
83 {
84 return Create(name, false);
85 }
86
Write(const void * data,size_t size)87 ssize_t COutFile::Write(const void *data, size_t size)
88 {
89 return write(_handle, data, size);
90 }
91
92 }}}
93