在File :: Open方法调用上获取ERROR_SHARING_VIOLATION错误

时间:2013-08-09 11:08:21

标签: file-io bitmap gdi+

我使用以下代码在程序开头加载png图标文件:

if (NULL == m_pImage) {
        Bitmap *pImage = new Bitmap(T2W(filePath));
        if (size == kSmallIconSize) {
            m_pImage = static_cast<Bitmap *>(pImage->GetThumbnailImage(size, size));
        } else {
            m_pImage = pImage;
        }
        if (m_pImage->GetLastStatus() == Ok) 
            m_resID = index;
        else
            return FALSE;
    }
    return TRUE;

然后在某些事件中,我尝试用

打开同一个文件
CFile file;
if (TRUE == file.Open(filePath, CFile::modeRead))

但无法打开文件,GetLastError()返回32,这意味着

  

ERROR_SHARING_VIOLATION

我该如何解决这个问题?

更新

为了确保导致错误的“Bitmap加载”代码,我在此之后立即尝试了CFile :: Open并确认了它。

为什么Bitmap::Bitmap(WCHAR *pFilePath)不能共享文件或者在加载后让它继续运行..?

2 个答案:

答案 0 :(得分:1)

来自Microsoft knowledgebase

MSDN1

解决方法:

MSDN2

答案 1 :(得分:1)

您的pImage变量尚未取消分配,因此该文件仍在使用中。

尝试使用CFile::shareDenyNone标志打开文件:

if (TRUE == file.Open(filePath, CFile::modeRead | CFile::shareDenyNone))