读书人

CFile 的SetStatus函数代码很简单。

发布时间: 2012-02-23 22:01:36 作者: rapoo

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();

C/C++ code
    // 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。

C/C++ code
//example for CFile::SetStatuschar* pFileName = "test.dat";extern BYTE newAttribute;CFileStatus status;CFile::GetStatus( pFileName, status );status.m_attribute = newAttribute;CFile::SetStatus( pFileName, status ); 

读书人网 >VC/MFC

热点推荐