Вы должны войти, чтобы создавать сообщения и темы.

FileSystemWatcher не принимает переменную string.

Всем доброго времени суток.
Я столкнулся с проблемой FileSystemWatcher не принимает переменную string, если метод вызывается в FormLoad после инициализации компонентов.
Но если написать "@"D:\Projekt"" то работает.
Так же работает если метод использовать в событии например нажатие кнопки.

private void Form1_Load(object sender, EventArgs e)
        {
            FileSystemWatcher AbdWatcher = new FileSystemWatcher(AbdPath, "*.pdf");
            AbdWatcher.SynchronizingObject = this;
            AbdWatcher.EnableRaisingEvents = true;

            AbdWatcher.Created += new FileSystemEventHandler(Abd_Watcher_Created);
            AbdWatcher.Deleted += new FileSystemEventHandler(Abd_Watcher_Deleted);
            AbdWatcher.Renamed += new RenamedEventHandler(Abd_Watcher_Renamed);
        }

 

Добрый вечер 🖐
Если речь о переменной СкопированоAbdPath, то напишите как и куда Вы записали поле / переменную.

В любой непонятной ситуации переходи на beta  © Win 10 Tweaker

Приветствую.
Что за переменная СкопированоAbdPath и где она объявлена?

Это выглядит вот так.

Я хочу что бы путь, который выбрал пользователь, сохранялся. И засунул его Properties.Settings.
При запуске программы AbdPaht = "".  А он неможет быть  null.

public Form1() 
{
 InitializeComponent(); 
Clipboard.Clear();
 SettingsLoad();
 } 
string StringAusfuranmeldungNummer = String.Empty;
string AvmAusfuranmeldungNummer = String.Empty; 
string AbdAusfuranmeldungNummer = String.Empty;
string AvmPath = String.Empty; 
string AbdPath = String.Empty;
 
void SettingsSave() {
 Settings.Default.textBox3 = textBox3.Text;
 Settings.Default.textBox4 = textBox4.Text;
 Settings.Default.Save(); 
} 
void SettingsLoad() {
 textBox3.Text = Settings.Default.textBox3; 
textBox4.Text = Settings.Default.textBox4; 
} 
private void Form1_Load(object sender, EventArgs e)
 { FileSystemWatcher AbdWatcher = new FileSystemWatcher(AbdPath, "*.pdf"); 
AbdWatcher.SynchronizingObject = this;
 AbdWatcher.EnableRaisingEvents = true;
 AbdWatcher.Created += new FileSystemEventHandler(Abd_Watcher_Created);
 AbdWatcher.Deleted += new FileSystemEventHandler(Abd_Watcher_Deleted);
 AbdWatcher.Renamed += new RenamedEventHandler(Abd_Watcher_Renamed);
 }

 

Вы сэкономите много времени, если проследуете последовательно по всем урокам C# в плейлисте.
И да, сразу подскажу, что сэкономите время ещё на том, что не будете говорить, что смотрели. Я вижу по коду, что нет.
Впереди будут большие проблемы, если Вы решите свой вопрос с watcher, но решите пропустить другие важные знания.
Начните с Visual Studio Community 2019.

В любой непонятной ситуации переходи на beta  © Win 10 Tweaker

Привет !

Я смотрел и не понял и еще раз смотрели и снова не понял. Я создал переменную AbmPath = String.Empty. Потом с textbox передал значение и сохранил его в ресурсах. И только после этого передал его в watcher, но он находиться в formload, так как  я ещё не присвоил значение  при компиляции выдает ошибку на null. Что он передает в AbdPath ? Ссылку или  значение ? И почему код внизу работает?

 private void Form1_Load(object sender, EventArgs e)
{
if (Settings.Default.textBox3 == null) { AbdWatcher(Settings.Default.textBox3, "*.pdf"); }


}

 

Нет, Михаил, не смотрели.
Ибо, если бы смотрели, то не писали бы String.Empty, это первое.
Второе: string говорите, что не может быть null. Если у Вас Visual Studio 2019 с последними обновлениями (читай, последней версией языка C#), то, внезапно, string может быть null и это было введено относительно недавно. Невозможность сделать string null, а также извращённые особые фигурные скобки говорят, что Вы используете не Visual Studio 2019 / 2022, а решили поюзать что-то, что Вам искренне посоветовали какие-то "гуру". Ни в коем случае даже не пытаюсь решать за Вас, что Вам использовать для написания ПО, просто констатирую, что из одного примера кода Я целых 4 момента выловил, чтобы точно сказать, что где-то Вы что-то делаете не так, как объяснялось. Так или иначе будет проще разобраться с вопросом вот так:

Озвучьте проблему, как будто Вы озвучиваете Техническое Задание (ТЗ) на заказ.
Мол, есть у меня файл. Называется 1.txt, хочу следить за ним при запуске программы..
Озвучьте точные файлы в точное время, когда и что нужно. Накидаем Вам код, Вы увидите, что Вы делали не так.

В любой непонятной ситуации переходи на beta  © Win 10 Tweaker

Я смотрел. Может я  не  так понял, так как я хотел выделить место в памяти. Я использую Visul Studio 2022.   Я просто иногда пиши все в одну строку, если там мало кода мне так легче читать. Я записал видео в чем сама причина. Мне тяжело изложить все свои мысли. Я так же приложу код. 

Первая проблема в том что я хочу что бы пользователь сам выбирал директорию. При повторно открытии она была выбрана. И это работает.
Я сделал так, что бы при загрузке FormLoad он начинал следить директории, которая была сохранена. И при первой компилляции выдает ошибку.

using System;
using System.IO;
using System.Windows.Forms;

namespace WindowsFormsApp2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        string Path;
       
        private void Form1_Load(object sender, EventArgs e){ PdfWatcher(Properties.Settings.Default.textBox2, "*.pdf"); }

        void PdfWatcher(string Path, string filter)
        {
            FileSystemWatcher fileSystemWatcher = new FileSystemWatcher(Path,filter);
            fileSystemWatcher.SynchronizingObject = this;
            fileSystemWatcher.EnableRaisingEvents = true;

            fileSystemWatcher.Created += new FileSystemEventHandler(PdfWatcher_Create);
            fileSystemWatcher.Deleted += new FileSystemEventHandler(PdfWatcher_Delete);
            fileSystemWatcher.Renamed += new RenamedEventHandler(PdfWatcher_Rename);
        }

        void PdfWatcher_Rename(object sender, RenamedEventArgs e) => textBox1.Text += $"{e.OldName} Umbenannt ein {e.Name} {DateTime.Now.ToString("HH:mm")}\r\n";

        void PdfWatcher_Delete(object sender, FileSystemEventArgs e) => textBox1.Text += $"{e.Name} Gelöscht {DateTime.Now.ToString("HH:mm")}\r\n";


        void PdfWatcher_Create(object sender, FileSystemEventArgs e) => textBox1.Text += $"{e.Name}  Erstellt {DateTime.Now.ToString("HH:mm")}\r\n";

        private void button2_Click(object sender, EventArgs e)
        {
            FolderBrowserDialog dialog = new FolderBrowserDialog();
            if (dialog.ShowDialog() == DialogResult.OK)
            {
                Path = dialog.SelectedPath;
                textBox2.Text = Path;
                //Properties.Settings.Default.textBox2 = Path;
                //Properties.Settings.Default.Save();
                PdfWatcher(Path, "*.pdf");
            }
            else
                return;
        }
    }
}

 

Я нашел решение.

Спасибо всем !

 

private void Form1_Load(object sender, EventArgs e)
        {
            try
            {
                PdfWatcher(Properties.Settings.Default.textBox2, "*.pdf");
            }
            catch
            {

            }

        }

 

Это не решение, Михаил =/
Сейчас запишу Вам видео... Пару минут

В любой непонятной ситуации переходи на beta  © Win 10 Tweaker

Посмотрите видео

Лайкнули Mikhail, Глеб и Андрей
MikhailГлебАндрей
В любой непонятной ситуации переходи на beta  © Win 10 Tweaker