none
Проверка папок на наличие файлов и отправка на почту RRS feed

  • Вопрос

  • Всем привет. Хочу реализовать такое:
    Есть локальная сеть. Есть ftp сервер. На нем созданы много папок с именами пользователей, например: user1, user2 и т.д. Если вставить файл в папку user1, то она должна пойти по маил адресу, например user1@local.com. И каждый раз проверять папку на наличие файла, есть есть новое, то посылать это на почту. Вот что надо мне сделать:
    1. Проверить папку на наличие файлов
    2. Отправка этих файлов на почту

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

    Для этого какими классы должны использоватся?? в какую сторону капать?

    8 июня 2012 г. 16:44

Ответы

  • Для отслеживания всего происходящего в папке вам понадобится вот этот класс. Если проект WinForms то он есть на вкладке "Панель элементов" подраздел "Компоненты". Если проект WPF, то его можно легко использовать создав в коде.

    Женат на WPF. Тайно встречаюсь с WinRT. Не сложилось с C#!

    • Помечено в качестве ответа Abolmasov Dmitry 9 июня 2012 г. 8:40
    8 июня 2012 г. 18:03
    Отвечающий
  • Когда ы подпишитесь на событие Created, то во втором параметре вы получите информацию по добавляемому файлу:

        private static void OnChanged(object source, FileSystemEventArgs e)
        {
            Console.WriteLine("File: " +  e.FullPath + " " + e.ChangeType);
        }

    А создавать экземпляры класса (объекты) вам придется для каждой отслеживаемой папки. Заведите массив и храните в нем объекты с полями вида:

    1. Путь до папки

    2. e-mail для отправки

    3. FileSystemWatcher (для отслеживания изменений)

    Ну а в обработчике создания файла, по sender (которым будет экземпляр FileSystemWatcher) вы сможете найти кому отправлять.


    Отвечающий

Все ответы

  • Для отслеживания всего происходящего в папке вам понадобится вот этот класс. Если проект WinForms то он есть на вкладке "Панель элементов" подраздел "Компоненты". Если проект WPF, то его можно легко использовать создав в коде.

    Женат на WPF. Тайно встречаюсь с WinRT. Не сложилось с C#!

    • Помечено в качестве ответа Abolmasov Dmitry 9 июня 2012 г. 8:40
    8 июня 2012 г. 18:03
    Отвечающий
  • Для отслеживания всего происходящего в папке вам понадобится вот этот класс. Если проект WinForms то он есть на вкладке "Панель элементов" подраздел "Компоненты". Если проект WPF, то его можно легко использовать создав в коде.

    Женат на WPF. Тайно встречаюсь с WinRT. Не сложилось с C#!

    спасибо за совет, про этот класс знаю. Этим можна определить изменение файла или папки. А как узнать какой файл добавлен??

    И еще, будет несколька клиент/папок. И на всех надо отследить изменение. Как программно привязать этот класс на эти папки? Чтобы он все эти папки контролировал. 

    Тут остановился на событие Created  думаю это мне поможет
    • Изменено Frech87 9 июня 2012 г. 6:07
  • Когда ы подпишитесь на событие Created, то во втором параметре вы получите информацию по добавляемому файлу:

        private static void OnChanged(object source, FileSystemEventArgs e)
        {
            Console.WriteLine("File: " +  e.FullPath + " " + e.ChangeType);
        }

    А создавать экземпляры класса (объекты) вам придется для каждой отслеживаемой папки. Заведите массив и храните в нем объекты с полями вида:

    1. Путь до папки

    2. e-mail для отправки

    3. FileSystemWatcher (для отслеживания изменений)

    Ну а в обработчике создания файла, по sender (которым будет экземпляр FileSystemWatcher) вы сможете найти кому отправлять.


    Отвечающий
  • Когда ы подпишитесь на событие Created, то во втором параметре вы получите информацию по добавляемому файлу:

        private static void OnChanged(object source, FileSystemEventArgs e)
        {
            Console.WriteLine("File: " +  e.FullPath + " " + e.ChangeType);
        }

    А создавать экземпляры класса (объекты) вам придется для каждой отслеживаемой папки. Заведите массив и храните в нем объекты с полями вида:

    1. Путь до папки

    2. e-mail для отправки

    3. FileSystemWatcher (для отслеживания изменений)

    Ну а в обработчике создания файла, по sender (которым будет экземпляр FileSystemWatcher) вы сможете найти кому отправлять.


    написал такой код:

    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            public string pathFolder;
            public Form1()
            {
                InitializeComponent();
            }
    
            private void btn_Add_Click(object sender, EventArgs e)
            {
                FolderBrowserDialog folder = new FolderBrowserDialog();
                if (folder.ShowDialog() == DialogResult.OK)
                {
                    txtb_Path.Text = folder.SelectedPath;
                    pathFolder = folder.SelectedPath;
                    lbx_path.Items.Add(folder.SelectedPath);
    
                }
            }
    
            private void Watcher(string Path)
            {
                fileSystemWatcher1.Path = Path;
                fileSystemWatcher1.Created += new System.IO.FileSystemEventHandler(fileSystemWatcher1_Created);
            }
    
            void fileSystemWatcher1_Created(object sender, System.IO.FileSystemEventArgs e)
            {
                MessageBox.Show(e.FullPath);
                //send mail
            }
    
            private void btn_Watcher_Click(object sender, EventArgs e)
            {
                Watcher(pathFolder);
            }
    
            
        }
    
        
    }

    шас думаю как создать множество экземпляров. Тут я не в отдельном классе написал код. 

  • В правильном направлении идете. Теперь вам тот функционал который вы сделали в форме, необходимо вынести в отдельный класс, ну и пути не через диалоговое окно выбирать, а из файла конфигурации программы, базы данных или еще от куда то загружать.

    Отвечающий
  • В правильном направлении идете. Теперь вам тот функционал который вы сделали в форме, необходимо вынести в отдельный класс, ну и пути не через диалоговое окно выбирать, а из файла конфигурации программы, базы данных или еще от куда то загружать.

    спасибо за помощь. Давно не программировал. Щас постараюсь вспомнить класс и массив объектов.
    9 июня 2012 г. 17:24