解读VC++编程中的文件操作API和CFile类(3)
下面给出MSDN中的一个例子:
char* pFileName = "test.dat";
TRY
{
CFile f( pFileName, CFile::modeCreate | CFile::modeWrite );
}
CATCH( CFileException, e )
{
#ifdef _DEBUG
afxDump << "File could not be opened " << e->m_cause << "
";
#endif
}
END_CATCH
CFile fileTest;
char* pFileName = "test.dat";
TRY
{
fileTest.Open(pFileName, CFile::modeCreate |CFile::modeWrite);
}
CATCH_ALL(e)
{
fileTest.Abort( );
THROW_LAST ( );
}
END_CATCH_ALL
2.文件的读写定位
定位文件中的数据是很重要的,这决定了写入的数据在文件中的位置。API函数
DWORD SetFilePointer(
HANDLE hFile, //文件的句柄
LONG lDistanceToMove, //字节偏移量r
PLONG lpDistanceToMoveHigh, //指定一个长整数变量,其中包含了要使用的一个高双字偏移(一般用来操作大型文件)。可设为零,表示只使用lDistanceToMove
DWORD dwMoveMethod //文件定位
);
dwMoveMethod文件定位的方式有三种:
FILE_BEGIN:从文件开始处。
FILE_CURRENT:从当前位置。
FILE_END:从文件的末尾。
此函数可以用来定位大型文件,lpDistanceToMoveHigh是高32位,lDistanceToMove是低32位。如果lpDistanceToMoveHigh为NULL时,函数操作成功,返回的是当前文件数据的偏移量,如果lpDistanceToMoveHigh不NULL,则返回数据的偏移量高32位放在 lpDistanceToMoveHigh中,函数调用失败返回的是0xffffffff.
BOOL SetEndOfFile(HANDLE hFile //文件的句柄);
CFile类的文件数据定位函数有:
LONG Seek(LONG lOff,UINT nFrom);
throw(CFileException);
如果要求的位置合法,则Seek返回从文件开始起的新字节偏移量
- 上一篇:VC编程改变指定的文件或文件夹的属性
- 下一篇:使用VC6.0实现窗口的任意分割