You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
120 lines
3.0 KiB
120 lines
3.0 KiB
// Copyright (c) 2000-2001 Microsoft Corporation, All Rights Reserved
|
|
//
|
|
// File attributes helper class.
|
|
|
|
|
|
|
|
|
|
#include <precomp.h>
|
|
#include <assertbreak.h>
|
|
|
|
class CFileAttributes
|
|
{
|
|
public:
|
|
|
|
CFileAttributes(
|
|
LPCWSTR wstrFileName,
|
|
bool fAutoRevert = true)
|
|
:
|
|
m_fAutoRevert(fAutoRevert),
|
|
m_dwOldFileAttributes(static_cast<DWORD>(-1L))
|
|
{
|
|
m_chstrFileName = wstrFileName;
|
|
if(m_fAutoRevert)
|
|
{
|
|
m_dwOldFileAttributes = ::GetFileAttributes(m_chstrFileName);
|
|
}
|
|
}
|
|
|
|
CFileAttributes(const CFileAttributes& cfa)
|
|
{
|
|
m_chstrFileName = cfa.m_chstrFileName;
|
|
m_fAutoRevert = cfa.m_fAutoRevert;
|
|
m_dwOldFileAttributes = cfa.m_dwOldFileAttributes;
|
|
}
|
|
|
|
virtual ~CFileAttributes()
|
|
{
|
|
if(m_fAutoRevert)
|
|
{
|
|
if(!ResetAttributes())
|
|
{
|
|
ASSERT_BREAK(0);
|
|
LogErrorMessage2(
|
|
L"Could not reset file attributes on file %s",
|
|
m_chstrFileName);
|
|
}
|
|
}
|
|
}
|
|
|
|
DWORD GetAttributes(DWORD* pdw)
|
|
{
|
|
DWORD dwRet = ERROR_SUCCESS;
|
|
DWORD dwTemp = ::GetFileAttributes(m_chstrFileName);
|
|
|
|
if(pdw)
|
|
{
|
|
*pdw = 0L;
|
|
if(dwTemp != -1L)
|
|
{
|
|
*pdw = dwTemp;
|
|
}
|
|
else
|
|
{
|
|
dwRet = ::GetLastError();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
dwRet = ERROR_INVALID_PARAMETER;
|
|
}
|
|
|
|
return dwRet;
|
|
}
|
|
|
|
DWORD SetAttributes(DWORD dwAttributes)
|
|
{
|
|
DWORD dwRet = E_FAIL;
|
|
DWORD dwTemp = ::GetFileAttributes(m_chstrFileName);
|
|
|
|
if(dwTemp != -1L)
|
|
{
|
|
m_dwOldFileAttributes = dwTemp;
|
|
if(::SetFileAttributes(
|
|
m_chstrFileName,
|
|
dwAttributes))
|
|
{
|
|
dwRet = ERROR_SUCCESS;
|
|
}
|
|
else
|
|
{
|
|
dwRet = ::GetLastError();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
dwRet = ::GetLastError();
|
|
}
|
|
|
|
return dwRet;
|
|
}
|
|
|
|
BOOL ResetAttributes()
|
|
{
|
|
BOOL fResult = FALSE;
|
|
if(m_dwOldFileAttributes != static_cast<DWORD>(-1L))
|
|
{
|
|
fResult = ::SetFileAttributes(
|
|
m_chstrFileName,
|
|
m_dwOldFileAttributes);
|
|
}
|
|
return fResult;
|
|
}
|
|
|
|
|
|
private:
|
|
|
|
CHString m_chstrFileName;
|
|
bool m_fAutoRevert;
|
|
DWORD m_dwOldFileAttributes;
|
|
};
|