Gibt es eine Möglichkeit, mit dem FSW zu bestimmen, ob eine Datei oder ein Verzeichnis gelöscht wurde?.NET Dateisystemwächter - war es eine Datei oder ein Verzeichnis?
Antwort
Sie können die FileSystemEventArgs.FullPath
-Eigenschaft abfragen, um festzustellen, ob es sich um ein Verzeichnis oder eine Datei handelt.
Um zu überprüfen, ob es sich um eine Datei oder ein Verzeichnis handelt.
Es wurde gelöscht, so dass diese Anrufe fehlschlagen würden, nicht? –
@Steven Sudit: Sie müssten zuerst die Eigenschaft FileSystemEventArgs.ChangeType überprüfen. –
'File.GetAttributes' löst eine' FileNotFoundException' für eine gelöschte Datei aus. –
Hier ist eine vereinfachte und korrigierte Version von Fletchers Lösung:
namespace Watcher
{
class Program
{
private const string Directory = @"C:\Temp";
private static FileSystemWatcher _fileWatcher;
private static FileSystemWatcher _dirWatcher;
static void Main(string[] args)
{
_fileWatcher = new FileSystemWatcher(Directory);
_fileWatcher.IncludeSubdirectories = true;
_fileWatcher.NotifyFilter = NotifyFilters.FileName;
_fileWatcher.EnableRaisingEvents = true;
_fileWatcher.Deleted += WatcherActivity;
_dirWatcher = new FileSystemWatcher(Directory);
_dirWatcher.IncludeSubdirectories = true;
_dirWatcher.NotifyFilter = NotifyFilters.DirectoryName;
_dirWatcher.EnableRaisingEvents = true;
_dirWatcher.Deleted += WatcherActivity;
Console.ReadLine();
}
static void WatcherActivity(object sender, FileSystemEventArgs e)
{
if(sender == _dirWatcher)
{
Console.WriteLine("Directory:{0}",e.FullPath);
}
else
{
Console.WriteLine("File:{0}",e.FullPath);
}
}
}
}
+1. Ihre Lösung ist viel einfacher – fletcher
Ich habe die Fehler raus, aber Sie haben die Idee, bevor ich es tat. –
Diese Lösung berücksichtigt nicht, dass beide 'FileSystemWatcher' auf separaten Threads laufen. Wenn sich also im überwachten Verzeichnis viele Ereignisse befinden, kann die Reihenfolge der Ereignisse, die Sie in Ihrer App sehen, unterschiedlich sein - z. Sie können aufzeichnen, dass eine Datei in einem Verzeichnis erstellt wurde, das noch nicht existiert, gefolgt von einem Ereignis, das das Verzeichnis erstellt. – Paya
I vorübergehende Nutzung der „Path“ Funktion zunächst, aber später bei nicht lösche ich es von Directory.Exists beheben. jedoch, dass nicht behebt den Delete Fall
bool isDirectory = Path.GetExtension(e.FullPath) == string.Empty;
if (e.ChangeType != WatcherChangeTypes.Deleted)
{
isDirectory = Directory.Exists(e.FullPath);
}
Ihre Frage macht nur Sinn, wenn es eine Datei auf dem gleichen Pfad und ein Verzeichnis mit dem gleichen Namen sein könnte. z.B. Wenn Sie Dateinamen ohne Erweiterung oder Verzeichnisse mit Erweiterung haben.
Wenn Ihre Verzeichnisse und Dateien den üblichen Konventionen folgen, nur auf das Vorhandensein einer Erweiterung im vollständigen Pfad (bool iSDirectory = Path.GetExtension(e.FullPath).Equals("");
) überprüfen, was funktioniert, ob die Datei/Verzeichnis existiert oder nicht, weil die Methode nur den angegebenen Pfad analysiert und hat keinerlei Verbindung zu der Datei.
Wenn Sie mit den unkonventionellen Problemen, die ich eingangs erwähnt habe, umgehen müssen, können Sie überprüfen überprüfen, ob ein Verzeichnis oder eine Datei an diesem Ort existiert. Wenn dies nicht der Fall ist, behandeln Sie sie so, als ob beide gelöscht wären. Wenn einer von ihnen existiert, behandeln Sie den anderen so, als wäre er gelöscht worden.
Ihre Anfrage bedeutet, dass Sie irgendwo eine Liste der Dateien und Verzeichnisse führen. Wenn Sie diese Liste überprüfen, können Sie Ihre Entscheidung über die Handhabung treffen.
Ich denke, dass dieser Ansatz besser als die Lösung ist, die zwei Dateisystembeobachter verwendet, um den Unterschied zu unterscheiden.
- 1. ein Verzeichnis oder eine Datei umbenennen
- 2. Dateisystemwächter als Windows-Dienst?
- 3. prüfen, ob eine Datei oder ein Verzeichnis in Java
- 4. Überprüfen Sie, ob Argument eine Datei oder ein Verzeichnis ist
- 5. Dateisystemwächter mehrere Dateien
- 6. Ist Dateisystemwächter nachweisbar?
- 7. maven2: ohne Verzeichnis von WAR
- 8. Play-Framework nicht vorkompilieren oder eine WAR-Datei korrekt
- 9. Wie kann man wissen, ob es sich bei GWT um eine Datei oder ein Verzeichnis handelt?
- 10. Erstellen Sie eine WAR-Datei
- 11. Ermitteln, ob eine Pfadangabe ein Verzeichnis oder eine Datei (oder etwas anderes) über WMI ist?
- 12. Generiere War-Datei ohne libs-Verzeichnis in Gradle
- 13. Datei oder Verzeichnis durchsuchen Dialog in Python
- 14. Wie überprüft man, ob eine Datei ein Verzeichnis oder eine reguläre Datei in Python ist?
- 15. Überprüfen, ob eine Datei ein Verzeichnis oder eine reguläre Datei in Python ist 2.7.11
- 16. Wie erstelle ich ein Verzeichnis, wenn es nicht existiert, um eine Datei zu erstellen?
- 17. eine WAR-Datei von Multimodul Projekt
- 18. Bilder in WAR-Datei
- 19. So fügen Sie weblogic-application.xml in eine WAR-Datei ein
- 20. Kann ich eine Proprietary War-Datei ändern?
- 21. mysql_connect(): Keine solche Datei oder Verzeichnis
- 22. Maven: WAR in Tomcat webapps Verzeichnis kopieren
- 23. Keine solche Datei oder ein Verzeichnis mit Flask
- 24. Python.h: Keine solche Datei oder Verzeichnis
- 25. Common Lisp - Wie sagt man, wenn ein Pfadname auf eine reguläre Datei oder ein Verzeichnis verweist?
- 26. wie Datei oder Verzeichnis von einem bestimmten Verzeichnis in PHP
- 27. Wie kann ich feststellen, ob ein bestimmter Pfad ein Verzeichnis oder eine Datei ist? (C/C++)
- 28. Mit os.listdir(), ob ein Objekt eine Datei oder ein Verzeichnis ist
- 29. writeFile keine solche Datei oder Verzeichnis
- 30. Ermitteln Sie, ob eine Auflistung ein Verzeichnis oder eine Datei in Python über FTP ist
Ich bin mir nicht sicher, ob Sie das können, ehrlich gesagt. Die offensichtliche Problemumgehung besteht darin, beim Start eine Liste von Verzeichnissen zu erstellen. Wenn es nicht in dieser Liste ist, war es eine Datei. –
Es ist nicht der "C# FileSystemWatcher". Es ist der .NET FileSystemWatcher. Es funktioniert genauso gut mit allen .NET-Sprachen, nicht nur mit C#. –
Es kommt mir vor, dass es funktioniert, wenn Sie zwei separate FSWs ausgeführt haben, die dasselbe Verzeichnis überwachen und sich nur in ihren 'NotifyFiter' Werten unterscheiden. –