Untitled

mail@pastecode.io avatar
unknown
csharp
2 years ago
5.6 kB
3
Indexable
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using SharpCompress.Archives;
using SharpCompress.Archives.Zip;
using SharpCompress.Common;

namespace CourseWorkFinal
{
    /// <summary>
    /// Класс для открытия файла проекта
    /// </summary>
    internal class FileManager
    {
        public string pathToDataBaseTable { get; private set; }
        public string pathToObjectPicture { get; set; }
        public string pathToTextFile { get; private set; }
        public string pathToFolder { get; private set; }


        public void GetFilesPath(string pathToFolder)
        {
            this.pathToFolder = pathToFolder;
            
            if (this.pathToFolder.Equals(""))
            {
                MessageBox.Show("Вы не указали путь к файлу", "Ошибка");
                return;
            }
            pathToDataBaseTable = "";
            pathToObjectPicture = "";
            pathToTextFile = "";

            int dbFilesCount = CountFilesOfSomeType("*.sqlite");
            int pngFilesCount = CountFilesOfSomeType("*.png");
            int textFilesCount = CountFilesOfSomeType("*.txt");

            // Если в папке находится только один файл определенного типа, то он выбирается автоматически
            // Иначе пользователь должен выбрать нужный файл

            OpenFileDialog chooseFile = new OpenFileDialog();
            chooseFile.InitialDirectory = pathToFolder;
            chooseFile.Multiselect = false;

            TryOpenFile(chooseFile, dbFilesCount, "Выберите таблицу координат Z", "*.sqlite");
            TryOpenFile(chooseFile, pngFilesCount, "Выберите изображените объекта", "*.png");
            TryOpenFile(chooseFile, textFilesCount, "Выберите текстовый файл с данными", ".txt");

        }

        public int CountFilesOfSomeType(string type)
        {
            int count = Directory.GetFiles(pathToFolder, type).Length;
            return count;
        }

        public void TryOpenFile(OpenFileDialog chooseFile, int fileCount, string title, string filter)
        {
            if (fileCount > 1 || fileCount == 0)
            {
                SetChooseFileTitleAndFilter(title, filter, chooseFile);
                if (chooseFile.ShowDialog() == DialogResult.OK)
                {
                    switch (filter)
                    {
                        case "*.sqlite":
                            pathToDataBaseTable = Path.GetFullPath(chooseFile.FileName);
                            break;
                        case "*.png":
                            pathToObjectPicture = Path.GetFullPath(chooseFile.FileName);
                            break;
                        case "*.txt":
                            pathToTextFile = Path.GetFullPath(chooseFile.FileName);
                            break;
                    }
                }
            }
            else
            {
                switch (filter)
                {
                    case "*.sqlite":
                        pathToDataBaseTable = Path.GetFullPath(Directory.GetFiles(pathToFolder, "*.sqlite")[0]);
                        break;
                    case "*.png":
                        pathToObjectPicture = Path.GetFullPath(Directory.GetFiles(pathToFolder, "*.png")[0]);
                        break;
                    case "*.txt":
                        pathToTextFile = Path.GetFullPath(Directory.GetFiles(pathToFolder, "*.txt")[0]);
                        break;
                }
            }

        }
        public void SetChooseFileTitleAndFilter(string title, string filter, OpenFileDialog chooseFile)
        {
            chooseFile.Title = title;
            chooseFile.Filter = filter;
        }

        public string[] GetDataFromTextFile()
        {
            string[] result = new string[4];
            // В список заносятся все строки из текстового файла
            List<string> lines = File.ReadAllLines(pathToTextFile, Encoding.Unicode).ToList();

            foreach (string line in lines)
            {
                //Если начинается с точности измерения, записываем полученную точность в результат
                if (line.StartsWith("Точность измерений"))
                {
                    List<string> value = line.Split(' ').ToList();
                    result[0] = (value[2].Split('м')[0]);

                }
                if (line.StartsWith("Количество структурных блоков"))
                {
                    List<string> value = line.Split(' ').ToList();
                    result[1] = (value[3]);

                }
                if (line.StartsWith("Количество геодезических марок, закрепленных в теле объекта"))
                {
                    List<String> value = line.Split(' ').ToList();
                    result[2] = (value[7]);

                }
            }
            return result;
        }
    }
}