private void BtnDecode_Click(object sender, EventArgs e) { BinaryFileHandling binaryFileHandling = new BinaryFileHandling(errorHandling); //Check code table file if (!File.Exists(_codeTableFile)) { MessageBox.Show("Error in decoding: Code table file \"" + _codeTableFile + "\" doesn't exist"); return; } //Reading code table file, spliting it to rows string fileContent = File.ReadAllText(_codeTableFile, Encoding.Default); string[] separator = { "\r\n" }; string[] rows = fileContent.Split(separator, StringSplitOptions.RemoveEmptyEntries); //Dictionary for tree building Dictionary <char, string> dict = new Dictionary <char, string>(); foreach (var item in rows) { string[] pieces = item.Split(';'); dict.Add(pieces[0].ToCharArray()[0], pieces[1]); } //Tree building from dict _tree.BuildFromCodeTable(dict); //Reading BitArray object from file BitArray encoded = null; var obj = binaryFileHandling.Load(_codedFile); if (obj != null) { if (obj is BitArray) { encoded = obj as BitArray; } } //Reading from "true" bits //byte[] testbytes = File.ReadAllBytes("testi.bin"); //BitArray encoded1 = new BitArray(testbytes); //Decoding if (encoded != null) { tbEncodedOutput.Text = _tree.Decode(encoded); } else { MessageBox.Show("Error in loading " + _codedFile + " file"); } }
private void BtnEncode_Click(object sender, EventArgs e) { //Check that text doesn't include ';' which is used as separator in code table if (tbTextToCode.Text.Contains(";")) { MessageBox.Show("Error in encoding: Text to encode can't include ';'"); return; } //Encoding _tree.BuildFromText(tbTextToCode.Text); BitArray encoded = _tree.Encode(tbTextToCode.Text); //Saving encoded text in "true" bits //byte[] bytes = new byte[encoded.Count/8+1]; //for (int i = 0; i < encoded.Count; i++) //{ // if (encoded[i]) // bytes[i/8] = (bytes[i/8] |= (byte)(1 << (i%8))); //} //File.WriteAllBytes("testi.bin", bytes); //Saving BitArray object to file BinaryFileHandling binaryFileHandling = new BinaryFileHandling(errorHandling); binaryFileHandling.Save(_codedFile, encoded); //Creating code table List <string> codeTable = new List <string>(); Dictionary <char, string> dict = new Dictionary <char, string>(); dict = _tree.CreateCodeTable(); foreach (var pair in dict) { codeTable.Add(pair.Key + ";" + pair.Value); } //Saving code table to file File.WriteAllLines(_codeTableFile, codeTable, Encoding.Default); }