4

在我的应用程序中,用 C 编写,在 Windows-XP 下:如何检查文件是否已被另一个应用程序打开?一种选择是重命名文件,并检查它是否被重命名。另一种选择是打开文件进行附加。但是这些选项非常耗时。有没有其他更省时的解决方案来解决这个问题?

4

2 回答 2

3

Windows API 中不存在用于检查某个函数是否在另一个应用程序中打开的函数。如果它确实存在,它将受到竞争条件的影响。

假设您首先检查了一个文件是否已经打开并且得到的答案是它当前没有打开。然后你继续打开它,但与此同时其他人已经打开它。然后您尝试打开失败。

因此,了解您是否可以打开文件的唯一方法是尝试这样做。如果文件以阻止您尝试打开它的方式打开,则该尝试将失败。

于 2013-03-24T12:36:16.443 回答
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);
}
于 2013-03-24T12:29:40.710 回答