public SaveDataDirectory(SaveDataFileSystemCore fs, string path, SaveFindPosition position, OpenDirectoryMode mode) { ParentFileSystem = fs; InitialPosition = position; FullPath = path; Mode = mode; }
public IFile OpenFile(string path, OpenMode mode) { try { return(SaveDataFileSystemCore.OpenFile(path, mode)); } catch (HorizonResultException ex) { ConvertResultException(ex); throw; } }
public DirectoryEntryType GetEntryType(string path) { try { return(SaveDataFileSystemCore.GetEntryType(path)); } catch (HorizonResultException ex) { ConvertResultException(ex); throw; } }
public void DeleteFile(string path) { try { SaveDataFileSystemCore.DeleteFile(path); } catch (HorizonResultException ex) { ConvertResultException(ex); throw; } }
public void CreateFile(string path, long size, CreateFileOptions options) { try { SaveDataFileSystemCore.CreateFile(path, size, options); } catch (HorizonResultException ex) { ConvertResultException(ex); throw; } }
public void CleanDirectoryRecursively(string path) { try { SaveDataFileSystemCore.CleanDirectoryRecursively(path); } catch (HorizonResultException ex) { ConvertResultException(ex); throw; } }
public long GetTotalSpaceSize(string path) { try { return(SaveDataFileSystemCore.GetTotalSpaceSize(path)); } catch (HorizonResultException ex) { ConvertResultException(ex); throw; } }
public void RenameFile(string srcPath, string dstPath) { try { SaveDataFileSystemCore.RenameFile(srcPath, dstPath); } catch (HorizonResultException ex) { ConvertResultException(ex); throw; } }
public void FsTrim() { MetaRemapStorage.FsTrim(); DataRemapStorage.FsTrim(); DuplexStorage.FsTrim(); JournalStorage.FsTrim(); CoreDataIvfcStorage.FsTrim(); FatIvfcStorage?.FsTrim(); SaveDataFileSystemCore.FsTrim(); int unusedHeaderOffset = IsFirstHeaderInUse ? 0x4000 : 0; BaseStorage.Slice(unusedHeaderOffset, 0x4000).Fill(TrimFillValue); }
public bool FileExists(string filename) => SaveDataFileSystemCore.FileExists(filename);
public void DeleteDirectoryRecursively(string path) { SaveDataFileSystemCore.DeleteDirectoryRecursively(path); }
public void CreateFile(string path, long size, CreateFileOptions options) { SaveDataFileSystemCore.CreateFile(path, size, options); }
public bool DirectoryExists(string path) => SaveDataFileSystemCore.DirectoryExists(path);
public void RenameFile(string srcPath, string dstPath) { SaveDataFileSystemCore.RenameFile(srcPath, dstPath); }
public IFile OpenFile(string path, OpenMode mode) { return(SaveDataFileSystemCore.OpenFile(path, mode)); }
public IDirectory OpenDirectory(string path, OpenDirectoryMode mode) { return(SaveDataFileSystemCore.OpenDirectory(path, mode)); }
public void DeleteFile(string path) { SaveDataFileSystemCore.DeleteFile(path); }
public void CleanDirectoryRecursively(string path) { SaveDataFileSystemCore.CleanDirectoryRecursively(path); }
public DirectoryEntryType GetEntryType(string path) { return(SaveDataFileSystemCore.GetEntryType(path)); }
public long GetTotalSpaceSize(string path) { return(SaveDataFileSystemCore.GetTotalSpaceSize(path)); }
public SaveDataFileSystem(Keyset keyset, IStorage storage, IntegrityCheckLevel integrityCheckLevel, bool leaveOpen) { BaseStorage = storage; LeaveOpen = leaveOpen; Keyset = keyset; var headerA = new Header(BaseStorage, keyset); var headerB = new Header(BaseStorage.Slice(0x4000), keyset); if (headerA.HeaderHashValidity == Validity.Valid) { IsFirstHeaderInUse = true; } else if (headerB.HeaderHashValidity == Validity.Valid) { IsFirstHeaderInUse = false; } else { ThrowHelper.ThrowResult(ResultFs.InvalidSaveDataHeader, "Savedata header is not valid."); } Header = IsFirstHeaderInUse ? headerA : headerB; FsLayout layout = Header.Layout; IStorage dataRemapBase = BaseStorage.Slice(layout.FileMapDataOffset, layout.FileMapDataSize); IStorage dataRemapEntries = BaseStorage.Slice(layout.FileMapEntryOffset, layout.FileMapEntrySize); IStorage metadataRemapEntries = BaseStorage.Slice(layout.MetaMapEntryOffset, layout.MetaMapEntrySize); DataRemapStorage = new RemapStorage(dataRemapBase, Header.MainRemapHeader, dataRemapEntries, leaveOpen); DuplexStorage = InitDuplexStorage(DataRemapStorage, Header); MetaRemapStorage = new RemapStorage(DuplexStorage, Header.MetaDataRemapHeader, metadataRemapEntries, leaveOpen); var journalMapInfo = new JournalMapParams { MapStorage = MetaRemapStorage.Slice(layout.JournalMapTableOffset, layout.JournalMapTableSize), PhysicalBlockBitmap = MetaRemapStorage.Slice(layout.JournalPhysicalBitmapOffset, layout.JournalPhysicalBitmapSize), VirtualBlockBitmap = MetaRemapStorage.Slice(layout.JournalVirtualBitmapOffset, layout.JournalVirtualBitmapSize), FreeBlockBitmap = MetaRemapStorage.Slice(layout.JournalFreeBitmapOffset, layout.JournalFreeBitmapSize), }; IStorage journalData = DataRemapStorage.Slice(layout.JournalDataOffset, layout.JournalDataSizeB + layout.JournalSize); JournalStorage = new JournalStorage(journalData, Header.JournalHeader, journalMapInfo, leaveOpen); CoreDataIvfcStorage = InitJournalIvfcStorage(integrityCheckLevel); IStorage fatStorage = MetaRemapStorage.Slice(layout.FatOffset, layout.FatSize); if (Header.Layout.Version >= 0x50000) { FatIvfcStorage = InitFatIvfcStorage(integrityCheckLevel); fatStorage = FatIvfcStorage; } SaveDataFileSystemCore = new SaveDataFileSystemCore(CoreDataIvfcStorage, fatStorage, Header.SaveHeader); }
public void CreateDirectory(string path) { SaveDataFileSystemCore.CreateDirectory(path); }