4

Windows-XPでCで記述された私のアプリケーションでは、ファイルが別のアプリケーションによってすでに開かれているかどうかを確認するにはどうすればよいですか?1つのオプションは、ファイルの名前を変更し、名前が変更されたかどうかを確認することです。別のオプションは、追加するためにファイルを開くことです。しかし、これらのオプションは非常に時間がかかります。この問題に対する他の、時間のかからない解決策はありますか?

4

2 に答える 2

3

関数が別のアプリケーションで開いているかどうかを確認する関数がWindowsAPIに存在しません。それが存在した場合、それは競合状態の影響を受けます。

最初にファイルがすでに開かれているかどうかを確認し、現在開いていないという回答が返ってきたとします。それからあなたはそれを開くために移動します、しかしその間に他の誰かが持っています。その後、開こうとして失敗します。

したがって、ファイルを開くことができるかどうかを知る唯一の方法は、そうしようとすることです。ファイルを開こうとしないような方法でファイルを開いた場合、その試みは失敗します。

于 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 に答える