首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

CFile 的SetStatus函数,代码很简单。但小弟我不知道哪出错了?

2012-02-23 
CFile 的SetStatus函数,代码很简单。但我不知道哪出错了??想保存数据到磁盘里,然后再让其属性为隐藏,下面是

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

热点排行