Autor Beitrag
C#
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 561
Erhaltene Danke: 65

Windows 10, Kubuntu, Android
Visual Studio 2017, C#, C++/CLI, C++/CX, C++, F#, R, Python
BeitragVerfasst: So 11.12.11 01:30 
Hallo @ll,

ich arbeite an meinem aktuellen Projekt gerade mit nem FileSystemWatcher. Der soll, wenn sich ein bestimmter Dateityp in dem Ordner befindet die Datei verschieben. Funktioniert auch alles soweit. Ich habe ein paar Test gemacht und Dateien in dem Ordner erstellt und reingeschoben, etc. Doch wenn ich nun 2 oder mehr Dateien des selben Typs auf einmal in den Ordner verschiebe / kopiere, schließt sich mein komplettes Programm ohne irgendwelche Exceptions oder ähnliches.

Instanziierung:
ausblenden C#-Quelltext
1:
2:
 watcher = new FileSystemWatcher(sourceDir, "*" + types.Aggregate((a, b) => a + "|*" + b)) { NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.Attributes | NotifyFilters.LastAccess, EnableRaisingEvents = true};
 watcher.Changed += FileChanged;

Die Instanziierung findet in der Instanziierung der zugeordneten Klasse ab.

Das ist der Code in dem verarbeitet wird:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
 private void FileChanged(object sender, FileSystemEventArgs e)
        {
            File.Copy(e.FullPath, Path.Combine(targetDir, e.Name));
            if (killSource) File.Delete(e.FullPath);
        }


Hat jemand eine Lösung?


\\\ EDIT:
Habe es nun nach einigem rumprobieren selbst gelöst - auf eine recht unortodoxe Art:
Wen es interessiert, hier der neue Code der Verarbeitung:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
        private void FileChanged(object sender, FileSystemEventArgs e)
        {
            if (fileTypes.All(s => !e.FullPath.EndsWith(s)) || !File.Exists(e.FullPath)) return;
            File.Copy(e.FullPath, Path.Combine(targetDir, e.Name));
            if (killSource) File.Delete(e.FullPath);
            watcher.Dispose();
            watcher = new FileSystemWatcher(sourceDir) { NotifyFilter = notifyFilter, EnableRaisingEvents = true };
            watcher.Changed += FileChanged;

        }

_________________
Der längste Typ-Name im .NET-Framework ist: ListViewVirtualItemsSelectionRangeChangedEventHandler