我正在使用以下代码来检查文件是否被其他应用程序使用:
如果文件正在被其他应用程序使用,将显示消息框。但是,如果文件不存在,也会显示消息框!
那么我该怎么做才能解决这个问题呢?我应该检查文件是否存在(使用另一个函数),还是可以更改
HANDLE fh = CreateFile("D:\\1.txt", GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);
if (fh == INVALID_HANDLE_VALUE)
{
MessageBox(NULL, "The file is in use", "Error", 0);
}
如果文件正在被其他应用程序使用,将显示消息框。但是,如果文件不存在,也会显示消息框!
那么我该怎么做才能解决这个问题呢?我应该检查文件是否存在(使用另一个函数),还是可以更改
CreateFile()
的参数,仅在文件正在使用且存在时返回INVALID_HANDLE_VALUE
?
errno
变量,但我不知道WinAPI)检查原因。 - Iharob Al AsimiCreateFile()
,请至少正确地使用它。您需要请求对文件的独占访问,而不是只读访问(其他进程可能允许对其文件的读取访问),然后如果失败,您需要使用GetLastError()
来区分ERROR_SHARING_VIOLATION
(文件正在使用)与ERROR_FILE_NOT_FOUND
等错误。 - Remy LebeaudwShareMode
为零,那段代码确实请求独占访问权限,是吗?(文档没有说明请求的访问权限会受到共享模式的影响。) - Harry JohnstonGetLastError()
来区分不同错误条件的评论仍然成立。 - Remy Lebeau