public static function ZipList( array $sourceFiles, string $zipFile, string $zipFolderName = null )
   {

      if ( ! \class_exists( '\\ZipArchive' ) )
      {
         throw new IOException(
            $zipFile,
            '\UK\IO\File::ZipList() fails with no ZIP-Support.'
         );
      }

      $oldFile = null;
      if ( \file_exists( $zipFile ) )
      {
         $oldFile = $zipFile . '.old';
         static::Move( $zipFile, $oldFile );
      }

      $zip = new \ZipArchive();
      if ( true === ( $res = $zip->open( $zipFile, \ZipArchive::CREATE ) ) )
      {
         // ZIP Archive writer is opened successful


         if ( ! empty( $zipFolderName ) )
         {
            // Add a sub folder if required
            $zip->addEmptyDir( $zipFolderName );
            // Normalize the ZIP file internal folder name for file system usage
            $zipFolderName = \rtrim( $zipFolderName, '\\/' ) . '/';
            foreach ( $sourceFiles as $k => $v )
            {
               // If the key is numeric, use the value file name, otherwise the key defines the file name
               $key = \is_numeric( $k ) ? \basename( $v ) : $k;
               $zip->addFile( $v, $zipFolderName . '/' . $key );
            }
         }
         else
         {
            foreach ( $sourceFiles as $k=>$v )
            {
               if ( \is_numeric( $k ) )
               {
                  $zip->addFile( $v, \basename( $v ) );
               }
               else
               {
                  $zip->addFile( $v, $k );
               }
            }
         }

         if ( ! $zip->close() )
         {

            if ( ! empty( $oldFile ) )
            {
               static::Move( $oldFile, $zipFile );
            }

            throw new FileAccessException(
               $zipFile,
               FileAccessException::ACCESS_CREATE,
               'Zipfile could not be created cause write could not be completed! (Closing file fails)'
            );

         }

      }
      else
      {

         if ( ! empty( $oldFile ) )
         {
            static::Move( $oldFile, $zipFile );
         }

         throw new FileAccessException(
            $zipFile,
            FileAccessException::ACCESS_CREATE,
            'Zipfile could not be created cause ' . static::GetZipArchiveError( $res ) );

      }

   }