资料操作的困惑
文件操作的困惑
我在一个工程中新建立一个文件后. 关闭. 在存盘操作中再打开该文件进行覆盖写操作. 流程如下:
CFile CFGfile(tempCFG,CFile::modeCreate | CFile::modeWrite);
CFGfile.Write(TxtFile,CFG_HEAD + sizeof(Console) * (CurrentProject.TheProject.CFG_File.CFG_Content.Group_Number + CurrentProject.TheProject.CFG_File.CFG_Content.Single_Number));
CFGfile.Close();
但发现新建立文件后写数据关闭后. 再打开Seek操作出错提示filecore.cpp出错.
void CMainFrame::OnProSave()
{
// TODO: Add your command handler code here
if(CurrentProject.Changed)
{
CFile file;
file.Open(CurrentProject.Path + "\\" + CurrentProject.name + ".cfg",CFile::modeRead | CFile::modeWrite,0);
// 读取cfg文件头信息
// file.Read(CurrentProject.TheProject.CFG_File.Data,CFG_HEAD);
// CurrentProject.TheProject.AllConsol = (Console*)malloc(sizeof(Console) * (CurrentProject.TheProject.CFG_File.CFG_Content.Single_Number + CurrentProject.TheProject.CFG_File.CFG_Content.Group_Number));//申请一个内存存放控制台信息
//读取控制台信息
file.Seek(sizeof(CFG_HEAD),CFile::begin); //从文件头开始往下移动41字节(cfg文件头信息)
file.Write(CurrentProject.TheProject.AllConsol, sizeof(Console) * (CurrentProject.TheProject.CFG_File.CFG_Content.Single_Number + CurrentProject.TheProject.CFG_File.CFG_Content.Group_Number));
file.Close();
}
}
跟踪到:
LONG CFile::Seek(LONG lOff, UINT nFrom)
{
ASSERT_VALID(this);
ASSERT(m_hFile != (UINT)hFileNull);
ASSERT(nFrom == begin || nFrom == end || nFrom == current);
ASSERT(begin == FILE_BEGIN && end == FILE_END && current == FILE_CURRENT);
DWORD dwNew = ::SetFilePointer((HANDLE)m_hFile, lOff, NULL, (DWORD)nFrom);
if (dwNew == (DWORD)-1)
CFileException::ThrowOsError((LONG)::GetLastError());
return dwNew;
}
ASSERT(m_hFile != (UINT)hFileNull);停留在这一行
------解决方案--------------------
file.Open(CurrentProject.Path + "\\" + CurrentProject.name + ".cfg",CFile::modeRead
------解决方案--------------------
CFile::modeWrite,0);
------------
CFile::Open()操作成功?
我在一个工程中新建立一个文件后. 关闭. 在存盘操作中再打开该文件进行覆盖写操作. 流程如下:
CFile CFGfile(tempCFG,CFile::modeCreate | CFile::modeWrite);
CFGfile.Write(TxtFile,CFG_HEAD + sizeof(Console) * (CurrentProject.TheProject.CFG_File.CFG_Content.Group_Number + CurrentProject.TheProject.CFG_File.CFG_Content.Single_Number));
CFGfile.Close();
但发现新建立文件后写数据关闭后. 再打开Seek操作出错提示filecore.cpp出错.
void CMainFrame::OnProSave()
{
// TODO: Add your command handler code here
if(CurrentProject.Changed)
{
CFile file;
file.Open(CurrentProject.Path + "\\" + CurrentProject.name + ".cfg",CFile::modeRead | CFile::modeWrite,0);
// 读取cfg文件头信息
// file.Read(CurrentProject.TheProject.CFG_File.Data,CFG_HEAD);
// CurrentProject.TheProject.AllConsol = (Console*)malloc(sizeof(Console) * (CurrentProject.TheProject.CFG_File.CFG_Content.Single_Number + CurrentProject.TheProject.CFG_File.CFG_Content.Group_Number));//申请一个内存存放控制台信息
//读取控制台信息
file.Seek(sizeof(CFG_HEAD),CFile::begin); //从文件头开始往下移动41字节(cfg文件头信息)
file.Write(CurrentProject.TheProject.AllConsol, sizeof(Console) * (CurrentProject.TheProject.CFG_File.CFG_Content.Single_Number + CurrentProject.TheProject.CFG_File.CFG_Content.Group_Number));
file.Close();
}
}
跟踪到:
LONG CFile::Seek(LONG lOff, UINT nFrom)
{
ASSERT_VALID(this);
ASSERT(m_hFile != (UINT)hFileNull);
ASSERT(nFrom == begin || nFrom == end || nFrom == current);
ASSERT(begin == FILE_BEGIN && end == FILE_END && current == FILE_CURRENT);
DWORD dwNew = ::SetFilePointer((HANDLE)m_hFile, lOff, NULL, (DWORD)nFrom);
if (dwNew == (DWORD)-1)
CFileException::ThrowOsError((LONG)::GetLastError());
return dwNew;
}
ASSERT(m_hFile != (UINT)hFileNull);停留在这一行
------解决方案--------------------
file.Open(CurrentProject.Path + "\\" + CurrentProject.name + ".cfg",CFile::modeRead
------解决方案--------------------
CFile::modeWrite,0);
------------
CFile::Open()操作成功?