Под Windows XP, с языком C: проверка, открыт ли файл
В моем приложении, написанном на C, под Windows-XP: как проверить, открыт ли файл уже другим приложением? Один из вариантов-переименовать файл и проверить, был ли он переименован. Другой вариант-открыть файл для добавления. Но эти варианты очень трудоемки. Существует ли какое-либо другое, менее трудоемкое решение проблемы?
2 ответа:
Откройте файл вэксклюзивном режиме .
HANDLE file = CreateFile(_T("MyFile"), GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL); if (file != INVALID_HANDLE_VALUE) { // file is not used by anyone else CloseHandle(file); }
В Windows API не существует функции, которая проверяла бы, открыта ли функция в другом приложении. Если бы он существовал, то был бы подчинен расовому условию.
Предположим, что вы сначала проверили, был ли файл уже открыт, и получили ответ, что в данный момент он не открыт. Затем вы двигаетесь дальше, чтобы открыть его, но в то же время кто-то другой сделал это. Тогда ваша попытка открыть не увенчается успехом.
Таким образом, единственный способ узнать, можете ли вы открыть файл - это попытаться сделать так. Если файл был открыт таким образом, чтобы предотвратить вашу попытку открыть его, то эта попытка будет неудачной.