Есть ли способ в 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;
}
... а затем какой-то другой процесс открывает файл между 'close' и вашей попыткой удалить его ... – 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. Обнаруживать, если файл открыт и редактируется
- 3. Как проверить, открыт ли файл в C
- 4. Проверьте, открыт ли файл
- 5. Определить, открыт ли файл
- 6. Проверьте, открыт ли файл
- 7. Файл не открыт в C
- 8. vbscript проверить, открыт ли файл
- 9. Есть ли способ проверить, открыт ли файл?
- 10. php: проверьте, открыт ли файл
- 11. Как проверить, открыт ли файл
- 12. Perl Проверить, открыт ли файл
- 13. проверить, открыт ли файл lsof
- 14. Как проверить, открыт ли файл?
- 15. Как проверить, открыт ли файл в tcl
- 16. Проверьте, открыт ли файл в другом процессе
- 17. Проверьте, открыт ли файл другим приложением в C?
- 18. Как проверить, открыт ли файл другим процессом в C?
- 19. Как проверить, открыт ли файл в COBOL?
- 20. Как проверить, открыт ли файл в Linux?
- 21. проверить, открыт ли текстовый файл в блокноте
- 22. Открыт ли файл в другом приложении?
- 23. Проверьте, открыт ли файл в Matlab
- 24. vba access - проверить, открыт ли файл excel
- 25. C# проверить, открыт ли вкладка
- 26. Проверьте, открыт ли файл, который не заблокирован
- 27. Обнаруживать, правильно ли загружен файл GWT * .nocache.js
- 28. Как проверить, был ли файл открыт другим приложением на C++?
- 29. Обнаружение, если файл открыт
- 30. Динамически обнаруживать XML-файл
Аналогичный вопрос уже был задан и ответ, прежде: https://stackoverflow.com/questions/13691603/whats-a-programmatic-way-to-detect-if-a- file-is-open-in-windows? rq = 1 – jpw