0

我使用以下代码在程序开始时加载了一个 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

我怎样才能解决这个问题?

更新:

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

为什么Bitmap::Bitmap(WCHAR *pFilePath)不共享文件或一旦加载就放手..?

4

2 回答 2

1

来自微软知识库

MSDN1

解决方法:

MSDN2

于 2013-08-09T14:19:33.707 回答
1

您的pImage变量尚未被释放,因此该文件仍在使用中。

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

if (TRUE == file.Open(filePath, CFile::modeRead | CFile::shareDenyNone))
于 2013-08-09T14:23:17.773 回答