读书人

CreateFile 打开资料重新写入失败但

发布时间: 2013-01-17 10:28:54 作者: rapoo

CreateFile 打开文件重新写入失败,但GetlastError没有失败提示,
我有一颗双亲树,顺序数组存放,要保存到文件里面。每次树被更新之后就要写到文件里面去,

可是下面这个函数运行没有错误,但文件总是没有得到更新


int PtTree::SaveToFile(LPCTSTR Filename)
{
//::DeleteFile(Filename);
//情况内容,
HANDLE hIndex = ::CreateFile(
Filename
,GENERIC_WRITE
,0
,NULL
,TRUNCATE_EXISTING
,FILE_ATTRIBUTE_NORMAL
,NULL);

//打开成功但就是没有把文件更新
if( INVALID_HANDLE_VALUE == hIndex )
{
ShowError();
return 0;
}
DWORD dwNumberOfBytes;

::SetFilePointer( hIndex, 0, 0 , FILE_BEGIN );

//写入节点个数
if(0 == WriteFile( hIndex, (LPVOID) &NodeCount, sizeof(NodeCount), &dwNumberOfBytes, NULL ) )
{
ShowError();
CloseHandle(hIndex);
return 0 ;
}

//写入叶子节点个数
if(0 == WriteFile( hIndex, (LPVOID)&LeafCount, sizeof(LeafCount), &dwNumberOfBytes, NULL ) )
{
ShowError();
CloseHandle(hIndex);
return 0 ;
}

//写入顺序树信息 ,这里在单步的时候可以看到dwNumberOfBytes为500,但文件的大小还是原来的248B
if(NodeCount && 0 == WriteFile( hIndex, (LPVOID)( &node), (NodeCount) * sizeof(PtNode), &dwNumberOfBytes, NULL ) )
{
ShowError();
CloseHandle(hIndex);
return 0 ;
}

//写入叶子数组
if(LeafCount && 0 == WriteFile( hIndex, (LPVOID)(&Leaf), (LeafCount) * sizeof(int), &dwNumberOfBytes, NULL ) )
{
ShowError();
CloseHandle(hIndex);
return 0 ;
}

CloseHandle(hIndex);

return 1;
}

[解决办法]
引用:
我有一颗双亲树,顺序数组存放,要保存到文件里面。每次树被更新之后就要写到文件里面去,

可是下面这个函数运行没有错误,但文件总是没有得到更新

C/C++ code?1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545……


文件第二次不刷你可以重刷 一次。

很简单的返回一个操作的结果,判断是否返回成功即可。

读书人网 >C++

热点推荐