Мне нужно проверить, открыты ли какие-либо файлы в папке другими приложениями или нет. К сожалению, если файл открыт, GetFileAttributesA() возвращает неправильные значения. Есть ли обходной путь для этого или я делаю что-то неправильно?Как проверить, открыт ли файл
ответ
GetFileAttributes
не имеет никакого отношения к файлообменнику. Единственный способ узнать, есть ли у кого-нибудь файл, открытый (тем самым препятствуя вам открыть его), - попытаться открыть его самостоятельно.
bool IsFileOpenBySomeoneElse(LPCTSTR pszFilename)
{
HANDLE hfile = CreateFile(pszFilename,
GENERIC_READ /*| GENERIC_WRITE*/,
0, //0 is share-none
NULL,
OPEN_ALWAYS);
if (hfile != INVALID_HANDLE_VALUE)
{
CloseHandle(hfile);
return false;
}
return (GetLastError() == ERROR_SHARING_VIOLATION);
}
Но писать эту функцию не делает вам никакой пользы, потому что к тому времени, когда вы получаете вокруг открытия т е файла для обработки, некоторые другие приложения могут иметь открытый файл.
Единственный безопасный способ сделать это - сделать то, что вы намерены делать с файлом, а когда вы попытаетесь открыть его для обработки, обратите внимание на значение ошибки, если вы терпите неудачу. Когда вы откроете файл, вы должны оставить его открытым, пока не закончите, или какой-либо другой процесс не сможет открыть его (или удалить его!) За вашей спиной.
- 1. Как проверить, открыт ли файл?
- 2. vbscript проверить, открыт ли файл
- 3. Perl Проверить, открыт ли файл
- 4. проверить, открыт ли файл lsof
- 5. Как проверить, открыт ли файл в COBOL?
- 6. Как проверить, открыт ли файл в Linux?
- 7. Как проверить, открыт ли файл в tcl
- 8. Как проверить, открыт ли файл на Java?
- 9. Как проверить, открыт ли файл в C
- 10. Ruby: как проверить, открыт ли файл?
- 11. Есть ли способ проверить, открыт ли файл?
- 12. Как проверить, открыт ли StreamReader?
- 13. проверить, открыт ли текстовый файл в блокноте
- 14. vba access - проверить, открыт ли файл excel
- 15. php FTP-файл: как проверить, открыт ли файл другим процессом
- 16. Как проверить, открыт ли NSWindow
- 17. Проверьте, открыт ли файл
- 18. Lua проверить, если файл открыт
- 19. Проверьте, открыт ли файл
- 20. Как проверить, открыт ли какой-либо файл .txt кем-либо?
- 21. Как проверить, открыт ли файл другим процессом (Java/Linux)?
- 22. Как проверить, был ли файл открыт другим приложением на C++?
- 23. Как проверить, открыт ли файл другой программой на Perl?
- 24. Как проверить, открыт ли файл другим процессом в C?
- 25. Как проверить, открыт ли файл с помощью Perl?
- 26. Как проверить, открыт ли файл (в том же процессе)
- 27. Как проверить, открыт ли текстовый файл в gedit
- 28. Как проверить, был ли файл открыт для записи на Perl?
- 29. Как проверить, открыт ли файл и/или редактироваться в Linux
- 30. Определить, открыт ли файл
Я согласен с «share-none». Я не согласен с «GENERIC_READ | GENERIC_WRITE». Если CreateFile терпит неудачу, потому что у пользователя только есть разрешение на чтение. И файл также открывается кем-то другим, откуда вы знаете, получит ли GetLastError приоритет ERROR_SHARING_VIOLATION? –
@Windows Программист: хорошая точка. но если вам нужен доступ на запись, вам все равно? Я думаю, это зависит от того, почему вы вызываете эту функцию. –
Почему вы предполагаете, что Кришне нужен доступ для записи? Вопрос не сказал так. –