Zum Inhalt springen

C# , FileSystemWatcher


Eleu

Empfohlene Beiträge

vor 5 Stunden schrieb r4phi:

@Eleu

Damit das ganze funktioniert musst du natürlich deine Program.cs anpassen und eine Instanz des Wrappers an deine Form übergeben:


Application.Run(new Form1(new FileSystemWatcherWrapper(@"C:\temp")));

Vielen Dank r4phi, es funktioniert soweit.

Für dich ganz natürlich, aber mich wundert es schon, dass nun diese Instanz über die Klasse Program der Form übergeben wird.

 

vor 5 Stunden schrieb Whiz-zarD:

Auch unsere Fragen, was du da eigentlich vor hast, kannst du auch nicht mal beantworten.

Wir haben vor Jahren ein Programm gekauft. Dieses Programm wertet Daten von einem übergeordnetem System aus und leitet diese Daten an eine Steuerung weiter.

Anders gesagt, das übergeordnete System erzeugt Textdateien, die in einem gemappten Laufwerk abgelegt werden. Immer wenn eine neue Textdatei erzeugt wird, wird diese in einer Listbox der Anwendung (FileSystemWatcher) angezeigt. Nun kann man in der ListBox eine Datei selektieren und wenn man das macht, werden die Daten aus der Textdatei ausgelesen und in TextBoxen angezeigt(StringKlasse). Über eine Schaltfläche, kann man die selektierte Datei in der ListBox auch löschen

Ich habe mir als Übung vorgenommen, diese Programmfunktionen mit C_Sharp nachzustellen und was ich bis jetzt beschrieben habe, konnte ich soweit auch umsetzen. 

Das ich so auf der Klassenprogrammierung rumreite, hat damit zu tun, dass du mir in einem vorherigen Thread geraten hast,die meisten Funktionen nicht in der Form zu programmieren, sondern nach Möglichkeit dieses in Klassen auszulagern.

Am LAN sind auch Scanner angeschlossen, die als Server konfiguriert sind und ihre Leseergebnisse ins LAN versenden. Eine weitere Aufgabe wird nun sein, über die Anwendung eine Socket Verbindung aufzubauen, diese Daten zu empfangen und mit Sollwerten aus der Textdatei zu vergleichen. Bei Ungleichheit soll ein Signal an eine Steuerung gesendet werden.

Aber es ist halt nur eine Übung..

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 1 Minute schrieb r4phi:

Inwiefern oder warum wundert es dich?

Weil Klassen, die von sich aus ein Event liefern entweder im Program oder in der Form bei InitializeComponent() erstellt werden, oder täusch das und das ist das gar nicht so und man könnte auch eine Instanz direkt in der Form erzeugen?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Du kannst das ganze auch in der Form initialisieren. Du kannst auch den Code aus InitializeConponent() ausschneiden und in den Constructor deiner Form packen. Funktioniert auch ohne Probleme  

Du kannst auch anstatt über den Form Constructor den FileSystemWatcherWrapper über eine Property in der Form injecten. 

Der Wrapper selbst hat doch schließlich auch ein Event „somethingHappend“ der die Events vom FileSystemWatcher kapselt 

Bearbeitet von r4phi
Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 10 Minuten schrieb Eleu:

Weil Klassen, die von sich aus ein Event liefern entweder im Program oder in der Form bei InitializeComponent() erstellt werden, oder täusch das und das ist das gar nicht so und man könnte auch eine Instanz direkt in der Form erzeugen?

Hier sei einfach noch mal das gesagt was schon gesagt wurde: Erst mit ConsoleApplication und  ClassLibary arbeiten. Dann ist das alles einfacher zu verstehen 

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 18 Stunden schrieb r4phi:

Du kannst das ganze auch in der Form initialisieren. Du kannst auch den Code aus InitializeConponent() ausschneiden und in den Constructor deiner Form packen. Funktioniert auch ohne Probleme  

 

Ich habe das mal probiert und du hast recht, es muss nur einmal initialisiert werden und nicht zyklisch. 

 private void Form1_Load(object sender, EventArgs e)
        {
            Watcher();
        }

private void Watcher()
        {
            FileSystemWatcher watcher = new FileSystemWatcher();
            watcher.Changed += (sender, e) => textBox1.Text = "Test";
            watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite
                                        | NotifyFilters.FileName | NotifyFilters.DirectoryName;
            watcher.Filter = "*.txt";
            watcher.Path = "C:\\C_Sharp";
            watcher.SynchronizingObject = this;
            watcher.EnableRaisingEvents = true;
            watcher.IncludeSubdirectories = false;
        }

Warum braucht man InitializeConponent() eigentlich? Man kann das doch auch in der Form load machen?

Es ist ein eigener Thread. Hatte Whiz-zarD ja schon erklärt...aber wozu ist das gut?

 

Fehler1.png

Bearbeitet von Eleu
Link zu diesem Kommentar
Auf anderen Seiten teilen

Oooooooooooh... warum arbeitest du nicht einfach zuerst mit einer ConsoleApplication und einer ClassLibary?
Ja. Die Form läuft in einem anderen Thread... Ich verstehe auch nicht warum man es dir zeigt wie man es eigentlich macht und dann wieder so ein rotz dabei rauskommt. Erst willst du das alles in einer eigenen Klasse.. jetzt im Form Load. Ich verstehe immer noch nicht warum wieso weshalb du die Sachen machst die du machst.

vor 10 Minuten schrieb Eleu:

Es ist ein eigener Thread. Hatte Whiz-zarD ja schon erklärt...aber wozu ist das gut?

Nimm endlich dein Buch in die Hand und lies.

Hier... so funktioniert dein Code...

public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            this.Load += Form1_Load;
        }

        private void Form1_Load(object sender, EventArgs e)
        {
           Watcher();
        }

        private void Watcher()
        {
            FileSystemWatcher watcher = new FileSystemWatcher();
            watcher.Changed += (sender, e) => IchBinEinNoob();
            watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite
                                                            | NotifyFilters.FileName | NotifyFilters.DirectoryName;
            watcher.Filter = "*.txt";
            watcher.Path = "C:\\Temp";
            watcher.SynchronizingObject = this;
            watcher.EnableRaisingEvents = true;
            watcher.IncludeSubdirectories = false;
        }

        private void IchBinEinNoob()
        {
            string text = "blabla";
            if (textBox1.InvokeRequired)
            {
                textBox1.Invoke((MethodInvoker) delegate { textBox1.Text = text; });
            }
            else
            {
                textBox1.Text = text;
            }
        }
    }

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 40 Minuten schrieb Eleu:

Am Besten schließt ihr das Forum, dann kann euch auch kein Noob mehr auf die Nerven gehen..

Hättest du die Fehlermeldung gegoogelt hättest du dir die Antwort selbst liefern können. Man hilft gerne, aber hier ist 0 Eigeninitiative und Interesse zu entdecken. 

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 18 Minuten schrieb r4phi:

Hättest du die Fehlermeldung gegoogelt hättest du dir die Antwort selbst liefern können. Man hilft gerne, aber hier ist 0 Eigeninitiative und Interesse zu entdecken. 

Letzten Endes kann man jede Frage mit einem Link abtun. Hast du dich schon mal gefragt, warum in den fachlichen Foren so wenig los ist? Vielleicht liegt es ja daran, dass junge Anfänger sich nicht mehr trauen zu fragen und warum das so ist, das frag dich mal lieber selber...

Ich höre jetzt auch auf hier noch weiter Fragen zu stellen, denn es macht echt keinen Spaß hier. 

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 2 Stunden schrieb Eleu:

Am Besten schließt ihr das Forum, dann kann euch auch kein Noob mehr auf die Nerven gehen..

Die Reaktionen hier sind leider verständlich. Erst schreibst du, dass du früher mal programmiert hast. Dann merkt man aber, dass dir so einiges fehlt. Man stellt dir Fragen, die du anfangst nicht beantwortest (willst?) sondern erst auf drängen.

Du willst etwas ausprobieren => funktioniert nicht => stellst Fragen und willst / bekommst eine Lösung. Und dann probierst du etwas anderes aus.

SO kannst du nichts lernen, da steckt doch kein Konzept dahinter.

Nichts gegen Learning by Doing, aber so wird das doch nichts.

Nimm dein Buch + https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/ + https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/

und lern es einmal richtig.

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 50 Minuten schrieb Eleu:

Hast du dich schon mal gefragt, warum in den fachlichen Foren so wenig los ist? Vielleicht liegt es ja daran, dass junge Anfänger sich nicht mehr trauen zu fragen und warum das so ist, das frag dich mal lieber selber...

Oder weil sie den Ehrgeiz besitzen, die Fragen selbstzuklären.

Du selbst hast auch eine enorm hohe Erwartungshaltung gegenüber das Forum. Wir werden hier nicht bezahlt, um dir zu helfen. Dies passiert hier alles freiwillig. Wir sind nicht dazu verpflichtet, dir zu helfen und wenn ich jemanden helfe, dann möchte ich auch sehen, dass der Hilfesuchende mitarbeitet und versucht zu verstehen, was ihm erklärt wird.

Du schreibst selbst, dass du ein Buch besitzt aber es liest sich hier so, als hättest du nicht mal ein Blick hineingeworfen und die ganze Diskussion dreht sich im Kreis. Da vergeht halt einen die Lust weiterhin zu helfen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor einer Stunde schrieb KeeperOfCoffee:

Du willst etwas ausprobieren => funktioniert nicht => stellst Fragen und willst / bekommst eine Lösung. Und dann probierst du etwas anderes aus.

SO kannst du nichts lernen, da steckt doch kein Konzept dahinter.

Doch, das funktioniert ganz gut bei mir. 

 

vor 59 Minuten schrieb Whiz-zarD:

 Da vergeht halt einen die Lust weiterhin zu helfen.

Das ist doch auch o.k. wenn ich dich mit meiner Fragerei nerve, dann hast du doch neben der Möglichkeit, mich runterzuputzen, oder vielleicht sogar zu beleidigen, auch noch die Option nicht zu antworten, oder?

Derjenige, der Lust dazu hat mit mir einen Dialog zu führen, der kann es dann ja machen 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.


Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...