C++中有沒有任何方法檢測文件是否已經在另一個程序中打開?
我想刪除並重寫一些文件,但是如果文件被打開,我想顯示一條錯誤消息。我正在使用Windows操作系統。檢測文件是否在C++中打開
回答
以視的結果的行動「是打開文件的查詢」是一個競爭條件(該查詢返回false
然後用一個程序打開該文件的程序試圖刪除例如之前) 。
嘗試使用DeleteFile()
刪除文件,如果失敗,則使用GetLastError()
顯示文件刪除失敗的原因。見System Error Codes的錯誤代碼列表(ERROR_SHARING_VIOLATION
其中規定「因爲它正在使用由另一個進程的進程無法訪問該文件。」)
如果我自己沒有打開文件,程序可以在什麼條件下打開文件?這對我來說有點困惑。你能給我舉一些例子嗎? – AlexandraC
@AlexandraC,我不確定你的意思是「如果我自己沒有打開它」?如果文件存在,任何程序都可以嘗試打開它,如果需要的話。一個明智的例子是病毒檢查器,它可以定期打開文件來檢查內容。 – hmjd
感謝您的回答,這是非常有幫助的。我想知道爲什麼程序想打開一個文件。是否有任何文檔可以閱讀關於此主題的更多信息? – AlexandraC
您可以使用remove("filename")函數。
#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;
}
...然後一些其他進程打開文件之間的'關閉'和你試圖刪除它... – molbdnilo
@molbdnilo:我不明白。是通過兩個進程訪問文件的同步嗎? – CreativeMind
是的,請參閱hmjd的答案。這是沒有意義的,因爲在隨後的任何時候它都可能失效。 (假設先發制人的多任務操作系統。) – molbdnilo
您可以使用CreateFile API function與NULL的共享模式,這將打開文件專用。
您可以使用is_open()
來檢查文件是否打開。如果是這樣,你可以關閉它或做其他事情。 這裏是一個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;
}
這不會檢查文件是否在其他程序中打開,只是您是否成功打開了它。 – zenzelezz
- 1. 檢測文件是否打開
- 2. 檢測SharePoint文件是否打開
- 3. 檢測文件是否在批處理文件中打開
- 4. 檢測wifi是否打開
- 5. 檢測文件是否已經在javascript中打開
- 6. 檢測文件是否已在javascript/hta中打開
- 7. 檢查文件是否在C++中打開並寫保護
- 8. 用php檢測文件是否正在上傳或打開
- 9. 如何檢查文件是否存在打開在EXE C++
- 10. 在bash中打開文件時檢測
- 11. 在Linux中檢測文件打開
- 12. VB.NET:檢測文本文件是否打開
- 13. 檢測文件打開
- 14. 檢查文件是否打開
- 15. 檢查文件是否打開
- 16. 如何檢查文件是否打開
- 17. 檢查文件夾是否打開(vba)
- 18. 檢查文件是否打開
- 19. 檢查文件是否已經打開
- 20. Perl檢查文件是否打開
- 21. Lua檢查文件是否打開
- 22. php:檢查文件是否打開
- 23. 如何檢查文件是否打開
- 24. matlab:檢查xls文件是否打開
- 25. 檢測文件是否在Windows中打開的程序化方法是什麼?
- 26. 檢測文件輸入對話框是否打開
- 27. 如何檢測MSword是否打開特定的文件?
- 28. 批處理文件檢測特定選項卡是否打開?
- 29. 檢查是否在記事本中打開文本文件
- 30. 如何檢查文本文件是否在gedit中打開
類似的問題已經被提出和回答之前:https://stackoverflow.com/questions/13691603/whats-a-programmatic-way-to-detect-if-a-文件打開在Windows?rq = 1 – jpw