public async Task ExtractMessage( string fileInputLocation, string password) { try { using (var input = new FileStream(fileInputLocation, FileMode.Open, FileAccess.Read)) { ConsoleLogger.LogMessage("Creating decoder instance..."); var decoder = await ImageDecoder.LoadAsync( imageStream : input, decodingConfiguration : new DecodingConfiguration ( password: password, tempStorageProvider: new MemoryStorageProvider(), bufferSize: 81920) ); ConsoleLogger.LogMessage("Creating decoder output handler..."); Output.FileDataOutputHandler handler = new Output.FileDataOutputHandler( (directory, file, stream) => { if (stream != null) { using (StreamReader reader = new StreamReader(stream)) { ConsoleLogger.LogMessage("Decoding completed"); ConsoleLogger.LogMessage("Message payload: "); ConsoleLogger.LogMessage(reader.ReadToEnd()); } } else { ConsoleLogger.ShowErrorMessage("Image doesn't contain any message payload"); } return(Task.CompletedTask); } ); ConsoleLogger.LogMessage("Start decoding image, extracting payload..."); await decoder.DecodeAsync(outputHandler : handler); } } catch (InvalidPasswordException) { ConsoleLogger.ShowErrorMessage("Invalid password"); } catch (Exception ex) { ConsoleLogger.ShowErrorMessage(ex.Message); } }
public async Task ExtractFiles( string fileInputLocation, string password, string targetDirectory) { try { using (var input = new FileStream(fileInputLocation, FileMode.Open, FileAccess.Read)) { ConsoleLogger.LogMessage("Creating decoder instance..."); var decoder = await ImageDecoder.LoadAsync ( imageStream : input, decodingConfiguration : new DecodingConfiguration ( password: password, tempStorageProvider: new MemoryStorageProvider(), bufferSize: 81920 )); ConsoleLogger.LogMessage("Creating decoder output handler..."); Output.FileDataOutputHandler handler = new Output.FileDataOutputHandler( (directory, file, stream) => { if (stream != null) { try { string fullName = Path.Combine(targetDirectory, file.Name); if (File.Exists(fullName)) { File.Delete(fullName); } ConsoleLogger.LogMessage($"'{file.Name}' has been extracted to {fullName}"); using (FileStream saveStream = new FileStream(fullName, FileMode.OpenOrCreate, FileAccess.Write)) { stream.CopyTo(saveStream); } } catch { ConsoleLogger.ShowErrorMessage($"Failed to process '{file.Name}' from the image container"); } } return(Task.CompletedTask); } ); ConsoleLogger.LogMessage("Start decoding image, extracting payload..."); await decoder.DecodeAsync(outputHandler : handler); } } catch (InvalidPasswordException) { ConsoleLogger.ShowErrorMessage("Invalid password"); } catch (Exception ex) { ConsoleLogger.ShowErrorMessage(ex.Message); } }