Синхронизатор файлов. Хранение информации - 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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д