• Home
  • History
  • Annotate
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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