eintyp.
Goto Top

FileSystemWatcher Pfad ändern ?

FileSystemWatcher Pfad ändern ?

Hallo Community,

In meinem Programm soll ein "fileSystemWatcher" einen Ordner überwachen. Ich möchte aber in meinem Programm den Pfad des "flieSystemWatchers" ändern, also den Ordner den er überwachen soll. Das sollte zb. durch einen Folderbrowser oder eine Textbox geschehen. Das Programm wird in Visual C# geschrieben. Ich hab schon viele Möglichkeiten versucht aber keine hat funktioniert, und ich hoffe ihr könnt mir helfen.
Zum Code möchte ich noch sagen dass er noch nicht ganz ausgearbeitet ist weil ich an dieser Stelle hänge.

Hier der Code:
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 WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        
        private void fileSystemWatcher1_Changed(object sender, System.IO.FileSystemEventArgs e)
        {
            label3.Text = "Aktion entdeckt";  
            fileSystemWatcher1.Path = folderBrowserDialog1.SelectedPath; 
        }

        private void radioButton1_CheckedChanged(object sender, EventArgs e)
        {
            label1.Text = "Überwachung Aktiv";  
            label3.Text = "Keine Aktion";  
        }

        private void radioButton2_CheckedChanged(object sender, EventArgs e)
        {
            label1.Text = "Überwachung Deaktiviert";  
            label3.Text = "Unbekannt";  
            

        }

        private void button1_Click(object sender, EventArgs e)
        {
            new FolderBrowserDialog().ShowDialog();
            label8.Text = folderBrowserDialog1.SelectedPath;
        }
        
        
    }
}

lg
EinTyp.

Content-ID: 172582

Url: https://administrator.de/contentid/172582

Ausgedruckt am: 25.11.2024 um 16:11 Uhr

wiesi200
wiesi200 05.09.2011 um 13:05:03 Uhr
Goto Top
Hallo,

also zuerst würd ich das ganze mal als Code Formatieren.

zum anderen

fileSystemWatcher1.Path = folderBrowserDialog1.SelectedPath; 

würd ich eher auf label8.Text verweisen.

Und welchen Fehler macht er denn?
EinTyp.
EinTyp. 05.09.2011 um 13:20:12 Uhr
Goto Top
Hallo,

der Fehler ist, dass ich den Pfad einmalig festlegen kann ihn aber dann nicht mehr ändern kann also der Pfad aus dem Folderbrowser wird nicht übernommen.

lg EinTyp.
99045
99045 05.09.2011 um 14:08:19 Uhr
Goto Top
Hi,

schreib den Pfad in die Registry und lies ihn mit deinem "FileSystemWatcher" von dort ein.

Gruß
wiesi200
wiesi200 05.09.2011 um 14:12:06 Uhr
Goto Top
Ok,

noch was

private void fileSystemWatcher1_Changed(object sender, System.IO.FileSystemEventArgs e)
fileSystemWatcher1.Path = folderBrowserDialog1.SelectedPath; 

gehört da meiner Meinung nach nicht mal hin.
das das Event nur ausgeführt wird wenn der Watcher was findet.

ich würd den Pfad in Settings schreiben und dann im Form_Load Event zuweisen.
EinTyp.
EinTyp. 05.09.2011 um 14:37:59 Uhr
Goto Top
Erstmal danke für die Antworten aber das ist leider nicht das was ich brauche, ich will den Pfad in meinem Programm durch eine Textbox etc ändern und das bekomm ich nicht hin. Wo ich einen Pfad dafür angeben muss weis ich schon. Falls ich was falsch verstanden habe sagts mir einfach, ich bin noch ein wenig unsicher.
wiesi200
wiesi200 05.09.2011 um 14:54:42 Uhr
Goto Top
Das mit dem ind Settings oder Registry schreiben bedeutet dann auch das er sich die eingaben merkt beim Programm Ende.

Du solltest dann noch hergehen und beim Beim Event für Textänderung der Textbox und sagen:

fileSystemWatcher1.Path = textbox?.text;
EinTyp.
EinTyp. 05.09.2011 um 15:39:43 Uhr
Goto Top
Hab eure Tipps umgesetzt und es hat nichts gebracht, ich kann den Pfad einmalig in den Einstellungen festlegen, ihn dann aber nicht durch die Textbox ändern. Hab es auch schon mit nem Bestätigen Button versucht, und es hat nichts gebracht.
wiesi200
wiesi200 05.09.2011 um 15:43:52 Uhr
Goto Top
Wie sieht denn den Code jetzt aus?
99045
99045 05.09.2011 um 15:49:01 Uhr
Goto Top
So schwierig kann das doch nicht sein. Du überprüfst mit deinem "SystemWatcher" per Timer, ob ein bestimmter Registry-Key gesetzt ist oder sich geändert hat und verwendest den.
Mit deinem "Browser" mit der tollen Textbox setzt du den Reg-Key mit dem gewünschten Pfad.
wiesi200
wiesi200 05.09.2011 um 15:57:45 Uhr
Goto Top
Zitat von @99045:
So schwierig kann das doch nicht sein. Du überprüfst mit deinem "SystemWatcher" per Timer, ob ein bestimmter
Registry-Key gesetzt ist oder sich geändert hat und verwendest den.
Mit deinem "Browser" mit der tollen Textbox setzt du den Reg-Key mit dem gewünschten Pfad.

Sorry, aber das hilft ihm doch auch nicht. Ob er jetzt den Wert auch einer Textbox oder der Registry ausliest ist doch sowas von egal. Und das mit dem Timer halte ich auch für absolut unnötig, für soetwas gibt's doch genug andere Events
99045
99045 05.09.2011 um 16:02:20 Uhr
Goto Top
Was ich für nötig halte, überlasse bitte mir und welche Tipps ich gebe, bitte auch..

PS. Zitierst du in einer Briefantwort auch den gesamten Text, des Schreibers in deiner Antwort?
EinTyp.
EinTyp. 05.09.2011 um 16:14:05 Uhr
Goto Top
Zitat von @99045:
So schwierig kann das doch nicht sein.

Das dachte ich mir auch, jedenfalls funktionieren eure Tipps nicht, egal ob mit oder ohne einer tollen Textbox.
Er übernimmt den Dateipfad einfach nicht, egal wo oder wie ich ihn angebe.
wiesi200
wiesi200 05.09.2011 um 16:44:41 Uhr
Goto Top
Zitat von @99045:
Was ich für nötig halte, überlasse bitte mir und welche Tipps ich gebe, bitte auch..
Überlasse ich dir auch, wollt dich nur drauf aufmerksam machen das es ein Schmarrn ist der auch nicht's bringt.

PS. Zitierst du in einer Briefantwort auch den gesamten Text, des Schreibers in deiner Antwort?
Wenn ich zu faul bin den Text zu löschen, JA.
99045
99045 05.09.2011 um 16:47:27 Uhr
Goto Top
Zitat von @wiesi200:
dass es ein Schmarrn ist der auch nicht's bringt.
Allen ist das Denken erlaubt. Vielen bleibt es erspart. (Curt Goetz)

EOD
xNx443
xNx443 05.09.2011 um 17:24:54 Uhr
Goto Top
Ich will mich ungern einmischen aber langsam artet es in kindisches Verhalten aus, wollt ihr nicht langsam zum Thema zurückkehren?
wiesi200
wiesi200 05.09.2011 um 18:21:47 Uhr
Goto Top
Netter Spruch,

leb doch einfach mit der Kritik
EinTyp.
EinTyp. 05.09.2011 um 19:34:43 Uhr
Goto Top
Da muss ich xNx443 recht geben, das hilft nun wirklich keinem.
Jenna86
Jenna86 04.11.2011 um 08:37:12 Uhr
Goto Top
Hi,

ich glaube das Problem ist, dass du den Path vom Filewatcher im Changed event änderst.
Wo du bei dem Button schon das Click-event abfängst ist es sicherlich sinnvoll dort die Änderung nach der Auswahl des Ordners zu machen.

Ich habe mal einen funktionierenden Prototypen entwickelt, da ich Flagfiles zum Eventauslösen benutzt habe. Falls du möchtest kann ich dir dazu mehr Infos zukommen lassen.

Aber vorerst tippe ich darauf, dass du den Path des Filewatchers nicht im richtigen Kontext setzt.

Auszüge aus meiner Lösung:
        private void button_openPath_Click(object sender, EventArgs e)
        {
            String selectedPath = string.Empty;
            String selectedFile = string.Empty;

            if (radioButton_folder.Checked)
            {
                folderBrowserDialog1.ShowDialog();
                selectedPath = folderBrowserDialog1.SelectedPath;
            }
            else
            {
                openFileDialog1.ShowDialog();
                selectedPath = Path.GetDirectoryName(openFileDialog1.FileName);
                selectedFile = Path.GetFileName(openFileDialog1.FileName);
            }

            if (!Directory.Exists(selectedPath))
            {
                selectedPath = "C:\\";  
            }

            fileSystemWatcher.IncludeSubdirectories = true;
            fileSystemWatcher.Path = selectedPath;
            if (!selectedFile.Equals(string.Empty))
            {
                fileSystemWatcher.Filter = selectedFile;
            }
            else
            {
                fileSystemWatcher.Filter = string.Empty;
            }

            textBox_path.Text = selectedPath + "\\" + selectedFile;  
            fileSystemWatcher.EnableRaisingEvents = true;
        }

Ich öffne je nachdem, ob ich einen ganzen Ordner oder nur eine Datei "beobachten" will ein anderes Auswahlfenster. Die Auswahl wird über die RadioButtons getroffen.

Meine Load-Methode der Form sieht übrigends so aus (erst nach Auswahl eines Ordners/einer Datei wird der Filewatcher eingeschaltet!):

        private void Form1_Load(object sender, EventArgs e)
        {
            openFileDialog1.CheckFileExists = false;
            openFileDialog1.CheckPathExists = true;
            openFileDialog1.InitialDirectory = _INIT_DIRECTORY;
            folderBrowserDialog1.ShowNewFolderButton = true;
            folderBrowserDialog1.SelectedPath = _INIT_DIRECTORY;

            fileSystemWatcher.Path = "C:\\";  
            fileSystemWatcher.NotifyFilter = //NotifyFilters.Attributes |
                //NotifyFilters.CreationTime |
                                                NotifyFilters.DirectoryName |
                                                NotifyFilters.FileName |
                //NotifyFilters.LastAccess |
                                                NotifyFilters.LastWrite //|
                //NotifyFilters.Security |
                //NotifyFilters.Size
            ;

            fileSystemWatcher.EnableRaisingEvents = false;
        }

Ich hoffe, dass dir das auch zwei Monate nach Erstellen deines Posts noch irgendwie helfen kann face-smile

Grüße
"Jenna"