Под Windows XP, с языком C: проверка, открыт ли файл


В моем приложении, написанном на C, под Windows-XP: как проверить, открыт ли файл уже другим приложением? Один из вариантов-переименовать файл и проверить, был ли он переименован. Другой вариант-открыть файл для добавления. Но эти варианты очень трудоемки. Существует ли какое-либо другое, менее трудоемкое решение проблемы?

2 4

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 не существует функции, которая проверяла бы, открыта ли функция в другом приложении. Если бы он существовал, то был бы подчинен расовому условию.

Предположим, что вы сначала проверили, был ли файл уже открыт, и получили ответ, что в данный момент он не открыт. Затем вы двигаетесь дальше, чтобы открыть его, но в то же время кто-то другой сделал это. Тогда ваша попытка открыть не увенчается успехом.

Таким образом, единственный способ узнать, можете ли вы открыть файл - это попытаться сделать так. Если файл был открыт таким образом, чтобы предотвратить вашу попытку открыть его, то эта попытка будет неудачной.