一、删除只读文件
DeleteFile删除文件:拒绝访问(5).
文件为只读属性,不能用 DeleteFile直接删除两种处理方法
详见MSDN:https://msdn.microsoft.com/en-us/library/windows/desktop/aa365535(v=vs.85).aspx
FILE_ATTRIBUTE_READONLY:file that is read-only. Applications can read the file, but cannot write to it or delete it
1:修改文件属性
DWORD dwAttribute=GetFileAttributes(Filename);
if(dwAttribute & FILE_ATTRIBUTE_READONLY)
{
dwAttribute &= ~FILE_ATTRIBUTE_READONLY;
SetFileAttributes(Filename,dwAttribute);
}
SetFileAttributes(文件名, FILE_ATTRIBUTE_READONLY); // 设定为只读
SetFileAttributes(文件名, FILE_ATTRIBUTE_HIDDEN ); //设定为隐藏
SetFileAttributes(文件名, FILE_ATTRIBUTE_SYSTEM); //设定为系统
SetFileAttributes(文件名, FILE_ATTRIBUTE_ARCHIVE); //设定为保存
SetFileAttributes(文件名, FILE_ATTRIBUTE_NORMAL); //设定为一般 (取消前四种属性)
或者使用 SetFileAttributes(文件名, FILE_ATTRIBUTE_NORMAL),取消所有的特定属性,再进行删除操作。
SHChangeNotify:更改属性后刷新
if (!SetFileAttributes(path, FILE_ATTRIBUTE_SYSTEM))
return GetLastError();
SHChangeNotify(SHCNE_ATTRIBUTES, SHCNF_PATH, directory, NULL);
详见MSDN:https://msdn.microsoft.com/en-us/library/windows/desktop/bb762164(v=vs.85).aspx
2:shfileoperation
详见MSDN:https://msdn.microsoft.com/en-us/library/bb759795(VS.85).aspx
https://msdn.microsoft.com/en-us/library/windows/desktop/bb762164(v=vs.85).aspx
SHFILEOPSTRUCT op;
memset(&op, 0, sizeof(op));
op.fFlags =FOF_NOCONFIRMATION; //不弹出确认对话框
op.pFrom = Path; //文件路径
op.wFunc = FO_DELETE; //操作
FindClose(hFind);
return SHFileOperation(&op); //SHFileOperation(&op)不能用getlasterror来获得错误码