code: protected function openFile(int $mode): SplFileObject
      {
          $path = $this->getPath();
  
          if (!is_file($path) && !@touch($path)) {
              throw new Exception('Could not create file: ' . $path);
          }
  
          if (!is_readable($path) || !is_writable($path)) {
              throw new Exception('File does not have permission for read and write: ' . $path);
          }
  
          if ($this->getConfig()->useGzip()) {
              $path = 'compress.zlib://' . $path;
          }
  
          $res = $this->fileAccessMode[$mode];
          $file = new SplFileObject($path, $res['mode']);
  
          if ($mode === self::FILE_READ) {
              $file->setFlags(SplFileObject::DROP_NEW_LINE | SplFileObject::SKIP_EMPTY | SplFileObject::READ_AHEAD);
          }
  
          if (!$this->getConfig()->useGzip() && !$file->flock($res['operation'])) {
              $file = null;
              throw new Exception('Could not lock file: ' . $path);
          }
  
          return $file;
      }
docs: Open the database file.
  
  @param int $mode
  
  @throws Exception
  
  @return SplFileObject