CreateFile失败,错误为ERROR_SHARING_VIOLATION

Lod*_*dle 4 c++ winapi file

我使用CreateFile api,有时随机失败并出现错误:ERROR_SHARING_VIOLATION.

我用Google搜索了,这个错误几乎没有.奇怪的是下次打开同一个文件很开心.

这是我的代码:

void FileHandle::open(const char* fileName, FILE_MODE mode)
{
    if (m_bIsOpen)
        close();

    HANDLE fh = NULL;

    DWORD dwDesiredAccess  = GENERIC_READ;
    DWORD dwShareMode = FILE_SHARE_READ;
    DWORD dwCreationDisposition = OPEN_EXISTING;

    switch (mode)
    {
    case FILE_READ:
        break;

    case FILE_WRITE:
        dwDesiredAccess  = GENERIC_WRITE;
        dwShareMode = 0;
        dwCreationDisposition = CREATE_ALWAYS;
        break;

    case FILE_APPEND:
        dwDesiredAccess  = GENERIC_WRITE;
        dwShareMode = 0;
        dwCreationDisposition = OPEN_ALWAYS;
        break;

    default:
        throw gcException(ERR_INVALID, "The mode was invalid");
        break;
    }

    fh = CreateFile(fileName, dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition, 0, NULL);

    if (!fh || fh == INVALID_HANDLE_VALUE)
        throw gcException(ERR_INVALIDFILE, GetLastError(), gcString("Failed to open the file {0}", fileName));

    m_hFileHandle = fh;
    m_bIsOpen = true;

    if (mode == FILE_APPEND)
    {
        DWORD high = 0;
        DWORD low = GetFileSize(fh, &high);

        uint64 pos = (((uint64)high)<<32) + (uint64)low;
        seek(pos);
    }
}
Run Code Online (Sandbox Code Playgroud)

我做错了什么或api有问题吗?

编辑:我使用完整的文件名(即C:\ somefile.txt)和mode = FILE_WRITE

shf*_*301 7

CreateFile没有任何问题 - 共享冲突意味着其他东西打开了同一个文件.这可能是您自己的程序,如果您以共享模式0打开文件,您将无法再次打开它.

当您收到错误时,可以使用Process Explorer确定打开文件的进程.