Gibt es eine Möglichkeit zu finden, ob eine Datei bereits geöffnet ist oder nicht?Überprüfen, ob eine Datei geöffnet ist
Antwort
protected virtual bool IsFileinUse(FileInfo file)
{
FileStream stream = null;
try
{
stream = file.Open(FileMode.Open, FileAccess.ReadWrite, FileShare.None);
}
catch (IOException)
{
//the file is unavailable because it is:
//still being written to
//or being processed by another thread
//or does not exist (has already been processed)
return true;
}
finally
{
if (stream != null)
stream.Close();
}
return false;
}
Wenn der Prozess keinen Schreibzugriff auf die Datei hat, führt dies zu einem irreführenden Ergebnis (das Öffnen schlägt fehl, aber nicht unbedingt, weil ein Handle existiert.) Das Öffnen für den Lesezugriff wäre weniger fehleranfällig. – hemp
Erstaunlich, dass die meisten Sprachen keine Methode zum Testen der Datei haben, ist offen. Wir haben den gleichen Methodentyp unter C++ in OS/2 verwendet. d. h. versuchen, die Datei exklusiv zu öffnen. Es funktioniert gut genug, aber ich habe es nie elegant gedacht. – Matt
Es ist keine Sprachfunktion, es ist eine Betriebssystemfunktion. Es gibt einfach keine einfache API (in Windows), um nach diesen Informationen zu suchen. Es ist möglich zu bekommen, aber es ist Low-Level und es gibt eine Menge von Parametern, die angegeben werden müssten, um zu wissen, was mit "offen" gemeint ist. – hemp
Als @pranay rana, aber wir müssen sicherstellen, dass wir in der Nähe unserer Datei-Handle:
public bool IsFileInUse(string path)
{
if (string.IsNullOrEmpty(path))
throw new ArgumentException("'path' cannot be null or empty.", "path");
try {
using (var stream = new FileStream(path, FileMode.Open, FileAccess.Read)) { }
} catch (IOException) {
return true;
}
return false;
}
Wie @Pranay Rana, ich habe diese Methode getestet, aber es erkennt nicht, wenn die Datei im Editor geöffnet ist . – James
Wenn Sie meinen, dass Sie überprüfen möchten, ob eine Datei geöffnet ist, bevor Sie versuchen, es zu öffnen , dann nein. (Zumindest nicht, ohne Low-Level zu gehen und jedes Dateihandle zu untersuchen, das im System offen ist.)
Außerdem wären die Informationen alt, wenn Sie sie bekommen. Selbst wenn der Test zurückgeben würde, dass die Datei nicht geöffnet ist, könnte sie geöffnet worden sein, bevor Sie den Rückgabewert verwenden können.
So ist der richtige Weg, um die Situation zu behandeln, zu versuchen, die Datei zu öffnen, und jeden Fehler behandeln, als möglicherweise auftreten.
Einverstanden. Ich würde eine designierte Klasse erstellen, die die offene Dateilogik oder zumindest den Test (IsFileAvailable) umschließt. Dadurch können Sie die Ausnahmemanagement mit einer Klasse speziell verantwortlich machen und wiederverwendbar machen. Sie können sogar weitere Logik anwenden, z. B. die Dateigröße testen, um zu sehen, ob die Datei in etc geschrieben wird, um eine detailliertere Antwort zu geben. Es wird auch Ihren Code viel sauberer machen.
- 1. Überprüfen, ob eine Excel-Arbeitsmappe geöffnet ist
- 2. Wie überprüfen Sie, ob eine Datei mit Perl geöffnet ist?
- 3. Ermitteln, ob eine Datei geöffnet ist
- 4. Kann ich überprüfen, ob die Datei bereits geöffnet ist?
- 5. Überprüfen, ob eine SQLite-Datenbank geöffnet ist oder irgendwo verwendet
- 6. überprüfen, ob eine Datei ein Bild ist
- 7. ifstream: überprüfen, ob geöffnet erfolgreich
- 8. Erkennen, ob eine Datei in Javascript bereits geöffnet ist
- 9. Erkennen, ob eine Datei bereits in Javascript geöffnet ist/hta
- 10. Erkennen, ob Datei in C++ geöffnet ist
- 11. VB.NET Überprüfen, ob eine Datei geöffnet ist, bevor Sie mit Lesen/Schreiben fortfahren?
- 12. Überprüfen Sie, ob eine Datei nicht geöffnet ist (nicht von anderen Prozessen verwendet) in Python
- 13. Wo ist eine Datei geöffnet?
- 14. Überprüfen, ob eine Datei eine .NET-Assembly ist
- 15. wie zu überprüfen, ob Teilformular in MS Zugriff geöffnet ist
- 16. Python/win32com - Überprüfen, ob das Programm geöffnet ist
- 17. überprüfen, ob Powerpoint in Java bereits geöffnet ist?
- 18. Überprüfen, ob NSURL lokale Datei ist
- 19. Überprüfen, ob die JAR-Datei geladen ist?
- 20. Überprüfen, ob eine Ressourcendatei vorhanden ist
- 21. Überprüfen Sie, ob eine PDF-Datei mit PHP beschädigt ist
- 22. Überprüfen, ob eine Datei in einem Makefile vorhanden ist
- 23. Überprüfen, ob eine STL-Datei ASCII oder binär ist
- 24. Python - Überprüfen Sie, ob eine Datei leer ist oder nicht
- 25. Überprüfen, ob eine Datei auf einem externen Server vorhanden ist
- 26. Überprüfen, ob ein Stream eine Zip-Datei ist
- 27. Überprüfen Sie, ob Argument eine Datei oder ein Verzeichnis ist
- 28. Wie kann man überprüfen, ob eine Datei
- 29. Überprüfen Sie, ob eine Remote-Datei existiert
- 30. Prüfen, ob der Datepicker geöffnet ist
Bitte bieten Sie genauere Informationen an. Bereits geöffnet durch Ihren Prozess oder einen anderen Prozess? Geöffnet oder nur mit Schreibzugriff geöffnet? Was ist mit Teilen? usw. Diese Frage ist zu vage. – hemp