Синхронизатор файлов. Хранение информации - C#

Узнай цену своей работы

Формулировка задачи:

Всем привет. Пишу свой маленький синхронизатор данных между двумя папками на одном ПК, что-то типа гугл докс. Пишу для курсовой работы. Программа растёт из другой программы, которая аналог копированию windows. Т.е. сейчас она копирует в одну сторону. И тут я задумался я над такой проблемой. Т.к. она у меня будет копировать в обе стороны, то ей надо знать что копировать, а что нет. Я подумал, что неплохо было бы хранить информацию, о том когда, откуда и куда был скопирован каждый файл. Пока на этом всё. Как лучше решить данную проблему? Хранение и перезаписывание *.txt файла? работа с xml файлом? БД, я думаю сама собой отсекается. То что сейчас имеется, кому интересно и чтоб было проще сориентироваться.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
 
namespace WFcopyfile
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        // копирование каталогов и файлов
        public static void CopyAll(DirectoryInfo source, DirectoryInfo target)
        {
            string path = @"E:\MyTest.txt";
            if (!File.Exists(path))
            {
                File.Create(path);
                CopyAll(source, target);
            }
            else
            {
                try
                {
                    // Если каталог, в который необходимо скопировать файлы, не существует,
                    // то он создаётся
                    
                    // Копируются все файлы из каталога в каталог
                    foreach (FileInfo fi in source.GetFiles())
                    {
                        fi.CopyTo(Path.Combine(target.ToString(), fi.Name), true);
                        RecordToFile(source, target, path, fi);
                    }
 
                    // Рекурсивно копируется каждый каталог
                    foreach (DirectoryInfo diSourceSubDir in source.GetDirectories())
                    {
                        // после копирования одного каталога...
                        DirectoryInfo nextTargetSubDir =
                            target.CreateSubdirectory(diSourceSubDir.Name);
                        // ...функция вызывает сама себя до тех пор,
                        // пока все данные не будут скопированны
                        CopyAll(diSourceSubDir, nextTargetSubDir);
                    }
                }
                // исключение на случай, если пользователь введёт не правильно исходный каталог
                // но тут еще надо обработать исключение если файл записи открыт
                catch (Exception e)
                {
                    MessageBox.Show("Файл с логом открыт! Закройте");
                }
            }
        }
        private static void RecordToFile(DirectoryInfo source, DirectoryInfo target, string path, FileInfo fi)
        {
            // в файл пишется дата, время, путь, куда скопирован файл и название файла
            using (StreamWriter sw = File.AppendText(path))
            {
                sw.WriteLine(DateTime.Now.ToLongDateString() + " " + "|" + 
                    " " + DateTime.Now.ToLongTimeString() + " " + "|" + 
                    " " + source.FullName + "\\" + fi.Name + " " + "|" +
                    " " + target.FullName + "\\" + fi.Name);
            }
        }
        private void btnCopyFiles_Click(object sender, EventArgs e)
        {
            // создаём две пустые строковые переменные, в которые будут 
            // записанны адреса каталогов для копирования
            string sourceDirectory = string.Empty;
            string targetDirectory = string.Empty;
            // с помощью строковый переменных создаём экземпляры классов
            // для работы с каталогами
            List<string> mass = new List<string>();
            var fbd = new FolderBrowserDialog();
            if (fbd.ShowDialog() == DialogResult.OK)
                sourceDirectory = fbd.SelectedPath;
            if (fbd.ShowDialog() == DialogResult.OK)
                targetDirectory = fbd.SelectedPath;
            DirectoryInfo diSource = new DirectoryInfo(sourceDirectory);
            DirectoryInfo diTarget = new DirectoryInfo(targetDirectory);
            CopyAll(diSource, diTarget);
            foreach (FileInfo file in diSource.GetFiles("*.*"))
            {
                File.Copy(file.FullName, @targetDirectory + "\\" + file.Name, true);
            }
        }
        /*
         * Данный код позволяет находить в файле необходимую строку и заменять ее другой
         * это заготовка, код будет дорабатываться
 
           string str = string.Empty;
            using (System.IO.StreamReader reader = System.IO.File.OpenText(@path))
            {
                str = reader.ReadToEnd();
            }
            str = str.Replace("ляляля", "777");
 
            using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"D:\test.txt"))
            {
                file.Write(str);
            }
        */
        private void Form1_Load(object sender, EventArgs e)
        {
            label1.Text = "После нажатия кнопки ''Копировать'' необходимо бдует указать дерикторию, откуда будут копироваться файлы, а затем директорию, в которую будут копироваться файлы.";
        }
 
    }
}

Решение задачи: «Синхронизатор файлов. Хранение информации»

textual
Листинг программы
watcher.EnableRaisingEvents = true

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.857 из 5
Похожие ответы