private async void Button_Encode(object sender, MouseButtonEventArgs e) { SaveFileDialog sf = new SaveFileDialog(); sf.Filter = Generals.DialogFilter; sf.InitialDirectory = file.DirectoryName; // Ă„ndert das SaveFileDialog Verzeichnis auf das der Originaldatei sf.FileName = file.Name.Replace(file.Extension, "") + Generals.FileExt; // Standardname ist der Name der Originaldatei if (sf.ShowDialog() == true) { canWork = false; EncodeButton.Visibility = Visibility.Hidden; FileName.Text = ""; await Task.Run(() => Encoder.Encode(file.FullName, sf.FileName)); Message.Show("Encoder", "Fertig"); canWork = true; } }
public static bool CheckFiles(string originalFileName) { bool check = true; Stopwatch watchEncode = new Stopwatch(); Stopwatch watchDecode = new Stopwatch(); watchEncode.Start(); Encoder.Encode("files\\" + originalFileName, "encode\\" + originalFileName + Generals.FileExt); watchEncode.Stop(); watchDecode.Start(); Decoder.Decode("encode\\" + originalFileName + Generals.FileExt, "result\\RESULT" + originalFileName); watchDecode.Stop(); FileStream fsOrigin = new FileStream("files\\" + originalFileName, FileMode.Open, FileAccess.Read); FileStream fsResult = new FileStream("result\\RESULT" + originalFileName, FileMode.Open, FileAccess.Read); BinaryReader brOrigin = new BinaryReader(fsOrigin); BinaryReader brResult = new BinaryReader(fsResult); if (fsOrigin.Length < fsResult.Length || fsOrigin.Length > fsResult.Length) // Wenn die Originaldatei kleiner als das Ergebnis ist, dann ist sowieso was nicht richtig | Selbe andersrum { check = false; } while (fsOrigin.Position < fsOrigin.Length) { if (brOrigin.ReadByte() != brResult.ReadByte()) { check = false; } } fsOrigin.Flush(); fsResult.Flush(); brOrigin.Close(); brResult.Close(); fsOrigin.Close(); fsResult.Close(); FileStream originalFS = new FileStream("files\\" + originalFileName, FileMode.Open, FileAccess.Read); FileStream tomFS = new FileStream("encode\\" + originalFileName + Generals.FileExt, FileMode.Open, FileAccess.Read); FileStream resultFS = new FileStream("result\\RESULT" + originalFileName, FileMode.Open, FileAccess.Read); string content = $"{originalFileName};{originalFS.Length - tomFS.Length};{originalFS.Length - resultFS.Length};{check};{originalFS.Length};{watchEncode.Elapsed.TotalSeconds};{tomFS.Length};{watchDecode.Elapsed.TotalSeconds}"; originalFS.Flush(); tomFS.Flush(); resultFS.Flush(); originalFS.Close(); tomFS.Close(); resultFS.Close(); StreamWriter sw = new StreamWriter("result.txt", true); sw.WriteLine(content); sw.Close(); return(check); }
/// <summary> /// Indicates for the User that something is happending by starting/stopping a animation and disabeling/enableing the button /// Encodes or Decodes depending on which button is clicked /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private async void DeEnCode_Click(object sender, RoutedEventArgs e) { // Sets Cursor to Wait to indicate that something is happening for User Window.Cursor = Cursors.Wait; // Starts progress Animation of Button and Circle MaterialDesignThemes.Wpf.ButtonProgressAssist.SetIsIndeterminate(encode, true); MaterialDesignThemes.Wpf.ButtonProgressAssist.SetIsIndicatorVisible(encode, true); progressBar.Visibility = Visibility.Visible; // Disables all elements so that no new operation can be done chooseFile.IsEnabled = false; destinationDirectory.IsEnabled = false; destinationName.IsEnabled = false; encode.IsEnabled = false; decode.IsEnabled = false; // En- or Decodes depeding on the Button Name switch ((sender as Button).Name) // Sets the sender object to a Button object so that the Name of the Button is readable { // Awaits Method asynchronously so that the window does not freeze case "encode": await Task.Run(() => Encoder.Encode()); break; case "decode": await Task.Run(() => Decoder.Decode()); break; } // Stops progress Animation of Button and Cricle progressBar.Visibility = Visibility.Hidden; MaterialDesignThemes.Wpf.ButtonProgressAssist.SetIsIndeterminate(encode, false); MaterialDesignThemes.Wpf.ButtonProgressAssist.SetIsIndicatorVisible(encode, false); // Enables all elements again chooseFile.IsEnabled = true; destinationDirectory.IsEnabled = true; destinationName.IsEnabled = true; encode.IsEnabled = true; decode.IsEnabled = true; // Sets Cursor back to default Window.Cursor = Cursors.Arrow; // Initializes new MessageBox Object MessageBox mb = new MessageBox(resourceDictionary); // Shows MessageBox mb.Show(); // Awaits 1 Second await Task.Run(() => System.Threading.Thread.Sleep(1000)); // Sets MainWindow back to StartupLayout StartupWindow(); }
/// <summary> /// Starts the Unit Test /// </summary> public static void StartTest() { // Changes file name to random names RadnomFileNames(); // The results of the test List <StringBuilder> results = new List <StringBuilder>(); // First Encoding second Decoding for (int chooseOperation = 0; chooseOperation < 2; chooseOperation++) { // Files to en/decode FileInfo[] files = null; switch (chooseOperation) { case 0: // Get File without ttpack extenstion files = new DirectoryInfo(_directory).GetFiles(); break; case 1: // Get Files with ttpack extesntion files = new DirectoryInfo(_directory).GetFiles("*.ttpack"); break; } // For each file in UnitTest-directory foreach (FileInfo file in files) { // Result of current test StringBuilder result = new StringBuilder(); // Upadtes Values Values.source = file; Values.destinationDirectory = Values.source.DirectoryName; System.Windows.Application.Current.Dispatcher.Invoke(() => System.Windows.Application.Current.Windows.OfType <MainWindow>().First().destinationName.Text = Values.source.Name); // To measure time operation took var timer = new System.Diagnostics.Stopwatch(); timer.Start(); switch (chooseOperation) { case 0: Encoder.Encode(); result.Append("encoding").Append(_colon); break; case 1: Decoder.Decode(); result.Append("decoding").Append(_colon); break; } timer.Stop(); long orgLength = file.Length; // Length of original file long newLength = new FileInfo(Values.destinationPath).Length; // Length of new file (ttpack or decoded) long differenceLenghts = orgLength - newLength; // Difference of lengths // Append information of test to result StringBuilder result.Append(file.Name).Append(_colon) .Append(file.Extension).Append(_colon) .Append(string.Format("{0:D2}:{1:D2}:{2:D2}:{3:D2}:{4:D3}", timer.Elapsed.Days, timer.Elapsed.Hours, timer.Elapsed.Minutes, timer.Elapsed.Seconds, timer.Elapsed.Milliseconds)).Append(_colon) .Append(orgLength).Append(_colon) .Append(newLength).Append(_colon) .Append(differenceLenghts); // Add result to results list results.Add(result); } // Message Box System.Windows.Application.Current.Dispatcher.Invoke(() => { MessageBox mb = new MessageBox(); mb.text.Text = "Done with test" + chooseOperation; mb.Show(); }); } // Message Box System.Windows.Application.Current.Dispatcher.Invoke(() => { MessageBox mb = new MessageBox(); mb.text.Text = "Writing result files now"; mb.Show(); }); WriteResults(ref results); }