public static CPackage *pkg_load_file(byte *pathPtr) { var environment = new NativeEnvironment(); try { if (!TryGetExistingFilePath(pathPtr, out var path)) { return(null); } using (var stream = File.OpenRead(path)) using (var binaryReader = new BinaryReader(stream, Encoding.UTF8)) { var package = _packageReader.ReadFrom(binaryReader); var cpackage = environment.ConvertToCPackage(package); _environments[new IntPtr(cpackage)] = environment; return(cpackage); } } catch (Exception exception) { HandleException(exception); environment.Dispose(); return(null); } }
private static void ExtractPkg(FileInfo file, bool appendFolderName = false, string defaultProjectName = "") { Console.WriteLine($"\r\n### Extracting package: {file.FullName}"); // Load package Package package; using (var reader = new BinaryReader(file.Open(FileMode.Open, FileAccess.Read, FileShare.Read))) { package = _packageReader.ReadFrom(reader); } // Get output directory string outputDirectory; var preview = string.Empty; if (appendFolderName) { GetProjectFolderNameAndPreviewImage(file, defaultProjectName, out outputDirectory, out preview); } else { outputDirectory = _options.OutputDirectory; } // Extract package entries var entries = FilterEntries(package.Entries); foreach (var entry in entries) { ExtractEntry(entry, ref outputDirectory); } // Copy project files project.json/preview image if (!_options.CopyProject || _options.SingleDir || file.Directory == null) { return; } var files = file.Directory.GetFiles().Where(x => x.Name.Equals(preview, StringComparison.OrdinalIgnoreCase) || ProjectFiles.Contains(x.Name, StringComparer.OrdinalIgnoreCase)); CopyFiles(files, outputDirectory); }
private static void InfoPkg(FileInfo file, string name) { var projectInfo = GetProjectInfo(file); if (!MatchesFilter(projectInfo)) { return; } Console.WriteLine($"\r\n### Package info: {name}"); if (projectInfo != null && _projectInfoToPrint?.Length > 0) { IEnumerable <string> projectInfoEnumerator; if (_projectInfoToPrint.Length == 1 && _projectInfoToPrint[0] == "*") { projectInfoEnumerator = Helper.GetPropertyKeysForDynamic(projectInfo); } else { projectInfoEnumerator = Helper.GetPropertyKeysForDynamic(projectInfo); projectInfoEnumerator = projectInfoEnumerator.Where(x => _projectInfoToPrint.Contains(x, StringComparer.OrdinalIgnoreCase)); } foreach (var key in projectInfoEnumerator) { if (projectInfo[key] == null) { Console.WriteLine(key + @": null"); } else { Console.WriteLine(key + @": " + projectInfo[key].ToString()); } } } if (_options.PrintEntries) { Console.WriteLine("Package entries:"); Package package; using (var reader = new BinaryReader(file.Open(FileMode.Open, FileAccess.Read, FileShare.Read))) { package = _reader.ReadFrom(reader); } var entries = package.Entries; if (_options.Sort) { if (_options.SortBy == "extension") { entries.Sort((a, b) => String.Compare(a.FullPath, b.FullPath, StringComparison.OrdinalIgnoreCase)); } else if (_options.SortBy == "size") { entries.Sort((a, b) => a.Length.CompareTo(b.Length)); } else { entries.Sort((a, b) => String.Compare(a.FullPath, b.FullPath, StringComparison.OrdinalIgnoreCase)); } } foreach (var entry in entries) { Console.WriteLine(@"* " + entry.FullPath + $@" - {entry.Length} bytes"); } } }