public void Initialize(string file = "", Stream[] stream = null !) { var ext = file.SubstringAfter('.'); if (string.IsNullOrEmpty(ext)) { return; } if (ext.Equals("pak", StringComparison.OrdinalIgnoreCase)) { try { var reader = new PakFileReader(file, stream[0], Versions) { IsConcurrent = true }; if (reader.IsEncrypted && !_requiredKeys.ContainsKey(reader.Info.EncryptionKeyGuid)) { _requiredKeys[reader.Info.EncryptionKeyGuid] = null; } _unloadedVfs[reader] = null; } catch (Exception e) { Log.Warning(e.ToString()); } } else if (ext.Equals("utoc", StringComparison.OrdinalIgnoreCase)) { try { var reader = new IoStoreReader(file, stream[0], stream[1], EIoStoreTocReadOptions.ReadDirectoryIndex, Versions) { IsConcurrent = true }; if (reader.IsEncrypted && !_requiredKeys.ContainsKey(reader.Info.EncryptionKeyGuid)) { _requiredKeys[reader.Info.EncryptionKeyGuid] = null; } _unloadedVfs[reader] = null; } catch (Exception e) { Log.Warning(e.ToString()); } } }
public void Initialize() { if (!_workingDirectory.Exists) { throw new ArgumentException("Given directory must exist", nameof(_workingDirectory)); } var osFiles = new Dictionary <string, GameFile>(); foreach (var file in _workingDirectory.EnumerateFiles("*.*", _searchOption)) { var ext = file.Extension.SubstringAfter('.'); if (!file.Exists || string.IsNullOrEmpty(ext)) { return; } if (ext.Equals("pak", StringComparison.OrdinalIgnoreCase)) { try { var reader = new PakFileReader(file, Game, Ver) { IsConcurrent = true }; if (reader.IsEncrypted && !_requiredKeys.ContainsKey(reader.Info.EncryptionKeyGuid)) { _requiredKeys[reader.Info.EncryptionKeyGuid] = null; } _unloadedVfs[reader] = null; } catch (Exception e) { Log.Warning(e.ToString()); } } else if (ext.Equals("utoc", StringComparison.OrdinalIgnoreCase)) { try { var reader = new IoStoreReader(file, EIoStoreTocReadOptions.ReadDirectoryIndex, Game, Ver) { IsConcurrent = true }; if (reader.IsEncrypted && !_requiredKeys.ContainsKey(reader.Info.EncryptionKeyGuid)) { _requiredKeys[reader.Info.EncryptionKeyGuid] = null; } _unloadedVfs[reader] = null; } catch (Exception e) { Log.Warning(e.ToString()); } } else { // Register local file only if it has a known extension, we don't need every file if (!GameFile.Ue4KnownExtensions.Contains(ext, StringComparer.OrdinalIgnoreCase)) { continue; } var osFile = new OsGameFile(_workingDirectory, file, Game, Ver); if (IsCaseInsensitive) { osFiles[osFile.Path.ToLowerInvariant()] = osFile; } else { osFiles[osFile.Path] = osFile; } } } _files.AddFiles(osFiles); }
public FIoStoreEntry(IoStoreReader reader, string path, uint userData) : base(reader) { Path = path; UserData = userData; ChunkId = reader.TocResource.ChunkIds[userData]; ref var offsetLength = ref reader.TocResource.ChunkOffsetLengths[userData];
public FIoStoreEntry(IoStoreReader reader, string path, uint tocEntryIndex) : base(reader) { Path = path; TocEntryIndex = tocEntryIndex; ref var offsetLength = ref reader.TocResource.ChunkOffsetLengths[tocEntryIndex];