CFile 的SetStatus函数,代码很简单。但我不知道哪出错了??
想保存数据到磁盘里,然后再让其属性为隐藏,下面是我的代码
void Save()
{
CFile f;
CFileException e;
if( !f.Open(pFileName, CFile::modeCreate | CFile::modeWrite, &e ) )
{
AfxMessageBox("磁盘空间不足,无法存档", MB_ICONASTERISK|MB_OK);
return ;
}
/////不要下面的五句,就能正常运行,但文件就不能隐藏了
1。CFileStatus status;
2。BYTE newAttribute=0x20|0x2; //0x20存档和0x2隐藏属性
3。CFile::GetStatus (pFileName,status);
4。status.m_attribute = newAttribute;
5。CFile::SetStatus( pFileName, status );
//存档//////
CArchive ar(&f,CArchive::store);
m_pVw->SerializeRaw(ar); //CEditView* m_pVW;
}
上面的代码在运行时会无法存档案,错误警告是:
在存取一未名命文件时发生共享违列.
[解决办法]
你在调用这五句的时候,你的f是open状态还是close,close后才能做这个操作,不然当然是共享错误了
[解决办法]
SetStatus 前加个 f.Close();
[解决办法]
恩,同意楼上两位。
你使用modeCreate方式创建文件后,需要关闭文件才能写它的属性。
[解决办法]
//需要关闭文件,否则发生共享违例
f.Close();
// TODO: Add your control notification handler code here CFile f; CFileException e; if( !f.Open(pFileName, CFile::modeCreate | CFile::modeWrite, &e ) ) { AfxMessageBox("磁盘空间不足,无法存档", MB_ICONASTERISK|MB_OK); return ; } //需要关闭文件,否则发生共享违例 f.Close(); CFileStatus status; BYTE newAttribute=0x20|0x2; //0x20存档和0x2隐藏属性 CFile::GetStatus (pFileName,status); status.m_attribute = newAttribute; CFile::SetStatus(pFileName, status ); //存档////// CArchive ar(&f,CArchive::store); m_pVw->SerializeRaw(ar); //CEditView* m_pVW;
[解决办法]
你把设置放到最前面或者最后就行了嘛,总之,就是你的操作完成或者没开始的时候设置就好了
[解决办法]
想保存数据到磁盘里,然后再让其属性为隐藏,下面是你的代码
void Save()
{
CFile f;
CFileException e;
if( !f.Open(pFileName, CFile::modeCreate | CFile::modeWrite, &e ) )
{
AfxMessageBox("磁盘空间不足,无法存档", MB_ICONASTERISK|MB_OK);
return ;
}
//存档//////
CArchive ar(&f,CArchive::store);
m_pVw->SerializeRaw(ar); //CEditView* m_pVW;
ar.close(); // 上面好像漏了这个
f.close(); // 上面好像漏了这个
/////要下面的五句,也能正常运行,文件也能隐藏了
1。CFileStatus status;
2。BYTE newAttribute=0x20|0x2; //0x20存档和0x2隐藏属性
3。CFile::GetStatus (pFileName,status);
4。status.m_attribute = newAttribute;
5。CFile::SetStatus( pFileName, status );
}
[解决办法]
更名、更改属性以及删除文件等操作都需要文件处于关闭状态的。
[解决办法]
SetStatus是CFile的静态成员函数,普通成员函数总是具体的属于某个类的具体对象的,静态成员函数由于不是与任何的对象相联系。
SetStatus前需要将之间对这个文件的操作做个了解,也就是Close。
//example for CFile::SetStatuschar* pFileName = "test.dat";extern BYTE newAttribute;CFileStatus status;CFile::GetStatus( pFileName, status );status.m_attribute = newAttribute;CFile::SetStatus( pFileName, status );