private void SelectDataFileButton_Click(object sender, RoutedEventArgs e)
        {
            var fileDialog = new OpenFileDialog
            {
                DefaultExt       = ".csv",
                Filter           = "All files (*.*)|*.*|Text files (.txt)|*.txt|CSV files (*.csv)|*.csv",
                FilterIndex      = 3,
                InitialDirectory = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location)
            };

            var result = fileDialog.ShowDialog();

            if (result == true)
            {
                DataFilePath = fileDialog.FileName;
                var textShown = DataFilePath.Length > 40 ? $"...{DataFilePath.Substring(DataFilePath.Length - 40)}" : DataFilePath;
                DataFilePathText.Text = textShown;
            }
        }
Exemplo n.º 2
0
        public void Run()
        {
            //convert all properties and run C++ code!
            if (string.IsNullOrEmpty(DataFilePath))
            {
                MessageBox.Show("Необходимо указать файл!", "Error");
                return;
            }

            if (IsAlgoEnabled)
            {
                if (!IsLevenshtein && !IsHuffman)
                {
                    MessageBox.Show("Необходимо выбрать префиксный код!", "Error");
                    return;
                }

                if (!IsHeuristic && !IsGenAgglo && !IsNaive && !IsFull && !IsFWC && !IsBin)
                {
                    MessageBox.Show("Необходимо выбрать алгоритм нахождения схемы конкатенации!", "Error");
                    return;
                }

                int   algoNum = 0, codeNum = 0, size = 0;
                int[] args;
                if (IsHeuristic)
                {
                    algoNum = 1;
                }
                if (IsGenAgglo)
                {
                    algoNum = 2;
                }
                if (IsNaive)
                {
                    algoNum = 3;
                }
                if (IsFull)
                {
                    algoNum = 4;
                }
                if (IsFWC)
                {
                    algoNum = 5;
                }
                if (IsBin)
                {
                    algoNum = 6;
                }

                if (IsHuffman)
                {
                    codeNum = 1;
                }
                else
                {
                    codeNum = 2;
                }

                if (algoNum == 1)
                {
                    size = 7;
                    args = new int[size];

                    int subAlgoNum = 0;
                    if (hvm.IsNaive)
                    {
                        subAlgoNum = 1;
                    }
                    if (hvm.IsFull)
                    {
                        subAlgoNum = 2;
                    }
                    if (hvm.IsFWC)
                    {
                        subAlgoNum = 3;
                    }
                    if (hvm.IsBin)
                    {
                        subAlgoNum = 4;
                    }
                    if (hvm.IsAuto)
                    {
                        subAlgoNum = 5;
                    }

                    int minLen, maxLen;
                    if (hvm.IsAutoLen)
                    {
                        minLen = -1;
                        maxLen = -1;
                    }
                    else
                    {
                        minLen = int.Parse(hvm.MinLen);
                        maxLen = int.Parse(hvm.MaxLen);
                    }

                    int useDicts = 0;
                    if (hvm.IsUseDicts)
                    {
                        useDicts = 1;
                    }

                    int words = 0;
                    if (hvm.IsFirstWord)
                    {
                        words = 1;
                    }
                    if (hvm.IsAllWords)
                    {
                        words = 2;
                    }
                    if (hvm.IsRandWord)
                    {
                        words = 3;
                    }

                    args[0] = algoNum;
                    args[1] = codeNum;
                    args[2] = subAlgoNum;
                    args[3] = minLen;
                    args[4] = maxLen;
                    args[5] = useDicts;
                    args[6] = words;
                }
                else
                if (algoNum == 2)
                {
                    size = 4;
                    args = new int[size];

                    int subAlgoNum = 0;
                    if (gavm.IsNaive)
                    {
                        subAlgoNum = 1;
                    }
                    if (gavm.IsFull)
                    {
                        subAlgoNum = 2;
                    }
                    if (gavm.IsFWC)
                    {
                        subAlgoNum = 3;
                    }
                    if (gavm.IsBin)
                    {
                        subAlgoNum = 4;
                    }
                    if (gavm.IsAuto)
                    {
                        subAlgoNum = 5;
                    }

                    int len;
                    if (gavm.IsAutoLen)
                    {
                        len = -1;
                    }
                    else
                    {
                        len = int.Parse(gavm.Klen);
                    }

                    args[0] = algoNum;
                    args[1] = codeNum;
                    args[2] = subAlgoNum;
                    args[3] = len;
                }
                else
                {
                    size    = 2;
                    args    = new int[size];
                    args[0] = algoNum;
                    args[1] = codeNum;
                }

                /**
                 * var pth = Encoding.Default.GetBytes(DataFilePath.ToArray());
                 * var ch = Encoding.Convert(Encoding.Default, Encoding.GetEncoding("Windows-1251"), pth);
                 * var str = Encoding.GetEncoding("Windows-1251").GetChars(ch);
                 */
                var str = DataFilePath + "\0";
                encode_file(str.ToArray(), size, args);

                MessageBox.Show("Сжатие прошло успешно!");
            }
            else
            {
                int type = 0;
                if (DataFilePath.Substring(DataFilePath.Length - 5) == ".aslv")
                {
                    type = 2;
                }
                else
                if (DataFilePath.Substring(DataFilePath.Length - 5) == ".ashf")
                {
                    type = 1;
                }
                else
                {
                    MessageBox.Show("Архиватор поддерживает только файлы с расширением .aslv или .ashf", "Error");
                    return;
                }
                var str = DataFilePath + "\0";
                decode_file(str.ToArray(), type);
                MessageBox.Show("Разархивирование прошло успешно!");
            }
        }