Gibt es eine Möglichkeit in C++ zu erkennen, ob eine Datei in einem anderen Programm bereits geöffnet ist ?.
Ich möchte einige Dateien löschen und neu schreiben, aber für den Fall, dass eine Datei geöffnet wird, möchte ich eine Fehlermeldung anzeigen. Ich benutze Windows OS.Erkennen, ob Datei in C++ geöffnet ist
Antwort
einer Aktion auf dem Ergebnis der Abhängigkeit „Datei öffnen Abfrage ist“ ist eine Race-Bedingung (die Abfrage false
und dann öffnet sich ein Programm die Datei, bevor Ihr Programm versucht, es zum Beispiel zu löschen) .
Es wurde versucht, die Datei mit DeleteFile()
zu löschen, und wenn dies fehlschlägt, zeigen Sie den Grund für das Löschen der Datei an, indem Sie GetLastError()
verwenden. Siehe System Error Codes für die Liste der Fehlercodes (ERROR_SHARING_VIOLATION
der heißt es: „Der Prozess kann nicht auf die Datei zugreifen kann, weil sie von einem anderen Prozess verwendet wird.“)
Unter welchen Bedingungen kann eine Datei von einem Programm geöffnet werden, wenn ich es nicht selbst öffne? Es ist ein bisschen verwirrend für mich. Kannst du mir bitte ein paar Beispiele geben? – AlexandraC
@AlexandraC, ich bin unsicher, was du meinst "wenn ich es nicht selbst öffne"? Wenn eine Datei existiert, kann jedes Programm versuchen, es zu öffnen, wenn es will. Ein sinnvolles Beispiel wäre ein Viren-Checker, der regelmäßig Dateien öffnen kann, um den Inhalt zu untersuchen. – hmjd
danke für die Antwort, es ist sehr hilfreich. Ich wollte wissen, warum ein Programm eine Datei öffnen möchte. Gibt es Unterlagen, in denen ich mehr über dieses Thema lesen kann? – AlexandraC
Sie können remove("filename") Funktion verwenden.
#include <iostream> // std::cout
#include <fstream> // std::ofstream
int main() {
std::ofstream ofs;
ofs.open ("example.txt");
if (ofs.is_open())
{
ofs << "anything";
std::cout << "operation successfully performed\n";
ofs.close();
}
else
{
std::cout << "Error opening file";
}
return 0;
}
... und dann ein anderer Prozess öffnet die Datei zwischen dem 'close' und Ihrem Versuch, es zu entfernen ... – molbdnilo
@molbdnilo: Ich habe nicht genau verstanden. Geht es um die Synchronisierung des Zugriffs auf die Datei durch zwei Prozesse? – CreativeMind
Ja, siehe die Antwort von hmjd. Ihr Test ist sinnlos, da er später jederzeit ungültig werden kann. (Angenommen, ein präemptives Multitasking-Betriebssystem.) – molbdnilo
Sie CreateFile API function mit dem Share-Modus von NULL verwenden, die das eröffnet Datei zur ausschließlichen Verwendung.
können Sie is_open()
verwenden, um zu überprüfen, ob die Datei geöffnet ist. Wenn es ist, können Sie es schließen oder etwas anderes tun. Hier ist ein exampe:
int main()
{
fstream filestr;
filestr.open ("test.txt");
if (filestr.is_open())
{
filestr << "File successfully open";
filestr.close();
}
else
{
cout << "Error opening file";
}
return 0;
}
Dies würde nicht prüfen, ob die Datei in anderen Programmen geöffnet ist, nur ob es Ihnen gelungen ist, sie für sich selbst zu öffnen. – zenzelezz
- 1. Erkennen, ob eine Datei bereits in Javascript geöffnet ist/hta
- 2. Erkennen, ob eine Datei in Javascript bereits geöffnet ist
- 3. Erkennen, ob der Dateieingabedialog geöffnet ist
- 4. Ermitteln, ob eine Datei geöffnet ist
- 5. Erkennen, ob Datei MP3 ist
- 6. Überprüfen, ob eine Datei geöffnet ist
- 7. iPhone: Erkennen, ob ein UIAlert/UIActionSheet geöffnet ist
- 8. erkennen, ob hochgeladene Datei
- 9. Kann ich überprüfen, ob die Datei bereits geöffnet ist?
- 10. Erkennen, ob Chrome Webview ist?
- 11. Wie überprüfen Sie, ob eine Datei mit Perl geöffnet ist?
- 12. Swift: Nativ erkennen, ob App abgestürzt ist
- 13. Wie überprüft man, ob eine Datei bereits von einem anderen Prozess in C geöffnet ist?
- 14. Wie überprüft man, ob eine Datei bereits in C geöffnet ist
- 15. Verwenden von C# Erkennen, ob Windows Installer 4.5 installiert ist
- 16. Erkennen, ob JIT verfügbar ist
- 17. Wo ist eine Datei geöffnet?
- 18. Erkennen, ob GPS in Titanstudio aktiviert ist
- 19. Erkennen, ob Zeichensatz in Python vorhanden ist
- 20. Überprüfen, ob eine Excel-Arbeitsmappe geöffnet ist
- 21. vimscript: Wie erkennen, ob bestimmte Datei
- 22. Prüfen, ob der Datepicker geöffnet ist
- 23. Erkennen, wann die automatische Füllung des Browsers geöffnet ist
- 24. überprüfen, ob Powerpoint in Java bereits geöffnet ist?
- 25. Wie erkennen, welche App auf Android geöffnet ist
- 26. Visual Studio C#: Erkennen, ob Workspace
- 27. Gesperrte Datei in Python erkennen und löschen
- 28. Erkennen, ob Wifi eingeschaltet ist - iOS
- 29. Erkennen, ob die Iframe-Webseite reaktionsfähig ist
- 30. C++ hat keine vorhandene Datei geöffnet
Eine ähnliche Frage gestellt wurde und beantwortet vor: https://stackoverflow.com/questions/13691603/whats-a-programmatic-way-to-detect-if-a- file-is-opened-in-windows? rq = 1 – jpw