< Сильный > Цель :

Основная цель - получить все имена путей из MySQL и использовать File System Watch, чтобы отслеживать их пути для переименования, удаления и создания.

У меня есть полный код здесь:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using MySql.Data.MySqlClient;

namespace ConsoleApp1

{
    class Program
    {


        static void Main(string[] args)
        {

            Run();
        }

        public static void Run()
        {

            MySqlConnection mcon = new MySqlConnection("credentials");
            MySqlDataReader myreader = null;
            MySqlCommand cmd = new MySqlCommand("select * from files", mcon);
            mcon.Open();

            myreader = cmd.ExecuteReader();

            List<String> list = new List<String>();
            while (myreader.Read())
            {
                list.Add(myreader[1].ToString());

                foreach (string i in list)
                {
                    Console.WriteLine(i);
                    FileSystemWatcher watcher = new FileSystemWatcher();
                    watcher.Path = Path.GetDirectoryName($@"{i}");
                    watcher.Filter = Path.GetFileName($@"{i}");
                    watcher.EnableRaisingEvents = true;
                    watcher.IncludeSubdirectories = true;

                    watcher.Created += directoryChange;
                    watcher.Deleted += directoryChange;
                    watcher.Renamed += onRename;

                    Console.Read();
                }
            }
            mcon.Close();


        }   


        private static void directoryChange(object source, System.IO.FileSystemEventArgs e)
        {
            Console.WriteLine($"{e.ChangeType} - {e.FullPath} - {System.Environment.NewLine}");
        }

        private static void onRename(object source, RenamedEventArgs e)
        {
            Console.WriteLine($"{e.OldFullPath} renamed to {e.FullPath}");
        }



    }
}

И это таблица в MySQL:

ID                   Path
1   G:/Folder/EdGzi/Test purposes Python/file.txt
2   G:/Folder/EdGzi/Test purposes Python/test2.txt

< Сильный > Проблема:

Когда я запускаю это приложение. Он смотрит только 1 файл (только верхняя запись только из данных MySQL). Принимая во внимание, что он должен был наблюдать за всеми файлами, возвращенными из таблицы MySQL.

Вот почему я создал код foreach.

Вопрос:

Как я могу это сделать?

0
C-Sharpsz 17 Фев 2020 в 17:48

2 ответа

Лучший ответ

Избавьтесь от Console.Read из цикла, поместите его после цикла. Это будет Console.WriteLine(i); каждая запись из таблицы MySQL.

Вот так:

public static void Run()
{
    MySqlConnection mcon = new MySqlConnection("server=WINX-PC04;user id=root;password=GS201706;database=technical");
    MySqlDataReader myreader = null;
    MySqlCommand cmd = new MySqlCommand("select * from files", mcon);
    mcon.Open();

    myreader = cmd.ExecuteReader();

    List<String> list = new List<String>();
    while (myreader.Read())
    {
        list.Add(myreader[1].ToString());
    }
    mcon.Close();

    foreach (string i in list)
    {
        Console.WriteLine(i);
        FileSystemWatcher watcher = new FileSystemWatcher();
        watcher.Path = Path.GetDirectoryName($@"{i}");
        watcher.Filter = Path.GetFileName($@"{i}");
        watcher.EnableRaisingEvents = true;
        watcher.IncludeSubdirectories = true;

        watcher.Created += directoryChange;
        watcher.Deleted += directoryChange;
        watcher.Renamed += onRename;     
    }
    Console.Read(); // Likethis
}   
1
LV98 17 Фев 2020 в 15:08

Вы можете предоставить FileSystemWatcher объекты только один каталог и расширение файла. Вы должны создать несколько FileSystemWatcher объекты для мониторинга нескольких разных файлов. Если вы сделаете это, вы должны c # заблокировать утверждение каждого события.

Этот пример следует расширениям *. Jpg , включая подкаталоги в целевом каталоге.

    static void Main(string[] args)
    {
        // target main folder
        string directoryName = @"E:\Apps\2019\SADtest\Decupe\SADtest\Veriler\sources\";

        // such as only watch JPG files
        string fileExtension = "*.jpg";


        using (FileSystemWatcher watcher = new FileSystemWatcher())
        {
            // NotifyFilter is Flag attribute.
            // triggers when file names created, changed or updated.
            watcher.NotifyFilter = NotifyFilters.FileName | NotifyFilters.CreationTime | NotifyFilters.LastWrite;
            watcher.Path = directoryName;

            // the Filter propertie must contain wildcards or empty.
            // you cannot write multiple extensions.
            // all files  : *.* 
            // only text  : *.txt 
            // ends withs : *test2.txt
            watcher.Filter = fileExtension;

            // track the same extensions in all subdirectories.
            watcher.IncludeSubdirectories = true;

            // register events
            watcher.Created += Watcher_Created;
            watcher.Deleted += Watcher_Deleted;
            watcher.Renamed += Watcher_Renamed;

            // begin watching...
            watcher.EnableRaisingEvents = true;

            // sample message
            Console.WriteLine("Press 'ENTER' to quit watching.");
            Console.WriteLine($"I am watching the files with the '{fileExtension}' extension in the '{directoryName}' directory.");

            // wait for the user to quit the program.
            Console.WriteLine();

            Console.Read();
        }
    }

    private static void Watcher_Renamed(object sender, RenamedEventArgs e)
    {
        Console.WriteLine($"Renamed:File: {e.OldFullPath} renamed to {e.FullPath}");
    }

    private static void Watcher_Deleted(object sender, FileSystemEventArgs e)
    {
        Console.WriteLine($"Deleted:File: {e.FullPath} {e.ChangeType}");
    }

    private static void Watcher_Created(object sender, FileSystemEventArgs e)
    {
        Console.WriteLine($"Created:File: {e.FullPath} {e.ChangeType}");
    }

Вот результаты консоли:

Нажмите «ENTER», чтобы выйти из режима просмотра. Я наблюдаю за файлами с расширением '* .jpg' в каталоге 'E: \ Apps \ 2019 \ SADtest \ Decupe \ SADtest \ Veriler \ sources'.

Переименован: Файл: E: \ Apps \ 2019 \ SADtest \ Decupe \ SADtest \ Veriler \ sources \ meee.jpg переименован в E: \ Apps \ 2019 \ SADtest \ Decupe \ SADtest \ Veriler \ sources \ sener.jpg Создан: Файл: E: \ Apps \ 2019 \ SADtest \ Decupe \ SADtest \ Veriler \ sources \ logo2.jpg Создано удалено: Файл: E: \ Apps \ 2019 \ SADtest \ Decupe \ SADtest \ Veriler \ sources \ logo2.jpg Удалено

0
Sener Akdemir 17 Фев 2020 в 18:21