/// <summary> /// 创建文件系统。 /// </summary> /// <param name="fullPath">要创建的文件系统的完整路径。</param> /// <param name="access">要创建的文件系统的访问方式。</param> /// <param name="stream">要创建的文件系统的文件系统流。</param> /// <param name="maxFileCount">要创建的文件系统的最大文件数量。</param> /// <param name="maxBlockCount">要创建的文件系统的最大块数据数量。</param> /// <returns>创建的文件系统。</returns> public static FileSystem Create(string fullPath, FileSystemAccess access, FileSystemStream stream, int maxFileCount, int maxBlockCount) { if (maxFileCount <= 0) { throw new GameFrameworkException("Max file count is invalid."); } if (maxBlockCount <= 0) { throw new GameFrameworkException("Max block count is invalid."); } if (maxFileCount > maxBlockCount) { throw new GameFrameworkException("Max file count can not larger than max block count."); } FileSystem fileSystem = new FileSystem(fullPath, access, stream); fileSystem.m_HeaderData = new HeaderData(maxFileCount, maxBlockCount); CalcOffsets(fileSystem); Utility.Marshal.StructureToBytes(fileSystem.m_HeaderData, HeaderDataSize, s_CachedBytes); try { stream.Write(s_CachedBytes, 0, HeaderDataSize); stream.SetLength(fileSystem.m_FileDataOffset); return(fileSystem); } catch { fileSystem.Shutdown(); return(null); } }
/// <summary> /// 销毁文件系统。 /// </summary> /// <param name="fileSystem">要销毁的文件系统。</param> /// <param name="deletePhysicalFile">是否删除文件系统对应的物理文件。</param> public void DestroyFileSystem(IFileSystem fileSystem, bool deletePhysicalFile) { if (fileSystem == null) { throw new GameFrameworkException("File system is invalid."); } FileSystem fileSystemImpl = (FileSystem)fileSystem; string[] names = fileSystemImpl.GetNames(); foreach (string name in names) { UnregisterFileSystem(name, fileSystemImpl); } string fullPath = fileSystemImpl.FullPath; fileSystemImpl.Shutdown(); m_FileSystems.Remove(fullPath); if (deletePhysicalFile && File.Exists(fullPath)) { File.Delete(fullPath); } }