EasyAnalysis图像分析库测试版以及源代码下载地址:
下载地址:
EasyAnalysis类中用到了大量的数据结构和宏定义,为了避免枯燥的罗列,只有在该数据结构被使用到的时候再作介绍,不再单独拿出一节来介绍。如果需要查看数据结和宏定义的具体声明,可以到PicStruct.h,Marco.h和Globle_def.h中查看。
一.CFileOpt类简介
从类的命名方式就可以看出,CFileOpt类实际上是对文件操作的一种封装。为了给所有应用平台的用户一个统一的访问界面,该类采用了ANSI C标准的文件读写库函数编写,提供类似于CFile的访问方式,主要功能是为了支持CImage和CBmp类的工作。
该类所能实现的功能仅仅是文件访问功能,与图像分析无关,您在编写图像相关应用或对文件操作的时候也无需一定要使用该类。因此,对于该类的说明只以函数手册的形式给出,有兴趣的朋友可以参考。如果您不想使用该类,可以跳过本节继续阅读。
二.方法说明:
1. 打开文件:
声明:Open(LPCTSTR,UINT) throw()
可见性:public
返回值:void
功能: 以UINT给定的方式打开路径为LPCTSTR的文件。
应用举例:
try{
CFileOpt m_File;
m_File.Open(“Test.bmp”,FILE_READWRITE | FILE_CREATE)
}
catch(CPException &err)
{
MessageBox(err.GetErrMsg());
}
CFileOpt m_File;
m_File.Open(“Test.bmp”,FILE_READWRITE | FILE_CREATE)
}
catch(CPException &err)
{
MessageBox(err.GetErrMsg());
}
说明:上述程序以读写的方式打开文件,如果文件不存在则建立。
打开方式:
FILE_READ :读方式打开文件
FILE_WRITE :写方式打开文件
FILE_CREATE:建立一个文件,需要与其他标志组合使用
FILE_APPEND:追加的方式打开文件
FILE_BINARY:二进制方式,需要与FILE_READ ,FILE_WRITE组合使用。
FILE_READWRITE:读写的方式打开文件
注:以读写的方式打开文件请使用FILE_READWRITE,而不要使用FILE_READ | FILE_WRITE
异常说明:当该函数调用出错的时候会抛出CPException异常,异常中错误代码和错误信息如下:
I. 当使用了不存在打开方式标志时,错误提示为"打开文件时使用了无效的标志!",对应的错误代码“ERR_FILE_INVALID_FLAG”
II. 当已经调用过Open方法正确打开文件而没有用Close关闭文件的时候,错误提示为“文件已经打开!”,错误代码为“ERR_FILE_OPENNED”
2. 关闭已经打开的文件
3. 打开文件:
声明:Close()
可见性:public
返回值:void
功能: 关闭已经打开文件
应用举例:
try{
CFileOpt m_File;
m_File.Open(“Test.bmp”,FILE_READWRITE | FILE_CREATE)
m_File.Close();
}
catch(CPException &err)
{
MessageBox(err.GetErrMsg());
}
CFileOpt m_File;
m_File.Open(“Test.bmp”,FILE_READWRITE | FILE_CREATE)
m_File.Close();
}
catch(CPException &err)
{
MessageBox(err.GetErrMsg());
}
4. 获取文件总字节数
声明:long GetSize() throw()
可见性:public
返回值:long
功能: 获取文件总字节数
应用举例:
long nSize=m_File.GetSize();
异常说明:若调用前没有用Open打开文件,则会抛出CPException异常,异常信息为“文件未打开!”,异常代码为“ERR_FILE_NOT_OPEN”
5. 获取文件中总行数
声明:long GetCountRow ()
可见性:public
返回值:long
功能: 获取文件总行数
应用举例:
long nRow=m_File.GetCountRow();
注:对于二进制方式打开的文件,该函数取得的结果将没有任何意义。
异常说明:若调用前没有用Open打开文件,则会抛出CPException异常,异常信息为“文件未打开!”,异常代码为“ERR_FILE_NOT_OPEN”
6. 判断是否到达文件尾
声明:bool IsEof ()
可见性:public
返回值:bool
功能: 判断是否到达文件尾,如果是则返回true,否则返回false
7. 获取文件游标位置
声明:long GetCurr() throw()
可见性:public
返回值:long
功能: 获取游标在文件中的位置。通常使用Seek方法会改变该位置。
8. 从文件中读取数据:
声明:int Read(void *pBuf,long,long) throw()
可见性:public
返回值:int
功能: 读取指定长度的数据块,并用pBuf返回。其中第一个long为单个数据块的宽度,第二个long为读取多少个这样的数据块。读取成功返回实际读取的数据块数。失败抛出异常
应用举例:
long nSize=sizeof(float);
long nCount=6;
float *pfBuf=new float[6];
m_File.Read(pfBuf,nSize,nCount);
delete [] pfBuf;
long nCount=6;
float *pfBuf=new float[6];
m_File.Read(pfBuf,nSize,nCount);
delete [] pfBuf;
异常说明:当该函数调用出错的时候会抛出CPException异常,异常中错误代码和错误信息如下:
I. 若调用前没有用Open打开文件,则会抛出CPException异常,异常信息为“文件未打开!”,异常代码为“ERR_FILE_NOT_OPEN”
II. 当传入的long参数为负数的时候,错误提示为“读取长度为负,文件读取失败!”,异常代码为“ERR_PARAMS”
III. 当读到数据长度为0的时候,错误提示为“文件读取失败!”,异常代码为“ERR_FILE_READ_FAIL”
9. 读取一行数据
声明:int ReadLine(void *pBuf) throw()
可见性:public
返回值:int
功能: 从当前游标开始,读取一行字符流数据。返回实际读取的字符数,失败返回0。
应用举例:
long nCount=0;
BYTE *pbBuf=new BYTE[6];
nCount=m_File.ReadLine(pbBuf);
注:当打开文件为二进制文件的时候,该函数取出的结果无意义。
10. 写入指定长度的数据
声明:int Write(void *pBuf,long,long) throw()
可见性:public
返回值:int
功能: 向文件写入指定长度的数据块,并用pBuf返回。其中第一个long为单个数据块的宽度,第二个long为写入多少个这样的数据块。读取成功返回实际写入的数据块数。失败抛出异常
应用举例:
long nSize=sizeof(float);
long nCount=6;
float *pfBuf=new float[6];
//为pfBuf赋值
m_File.Write(pfBuf,nSize,nCount);
delete [] pfBuf;
long nCount=6;
float *pfBuf=new float[6];
//为pfBuf赋值
m_File.Write(pfBuf,nSize,nCount);
delete [] pfBuf;
异常说明:当该函数调用出错的时候会抛出CPException异常,异常中错误代码和错误信息如下:
I. 若调用前没有用Open打开文件,则会抛出CPException异常,异常信息为“文件未打开!”,异常代码为“ERR_FILE_NOT_OPEN”
II. 当传入的long参数为负数的时候,错误提示为“写入长度为负,文件写入失败!”,异常代码为“ERR_PARAMS”
III. 当读到数据长度为0的时候,错误提示为“文件写入失败!”,异常代码为“ERR_FILE_WRITE_FAIL”
11. 获取一个字节
声明:BYTE GetAt() throw()
重载:BYTE GetAt(long ) throw()
可见性:public
返回值:BYTE
功能: 在当前位置或在long参数指定位置获取一个字符
注:当long参数小0或大于文件总长度的时候,则函数默认从文件首或文件尾读取
异常说明:当该函数调用出错的时候会抛出CPException异常,异常中错误代码和错误信息如下:
I. 若调用前没有用Open打开文件,则会抛出CPException异常,异常信息为“文件未打开!”,异常代码为“ERR_FILE_NOT_OPEN”
II. 读取失败的时候,错误提示为“文件读取失败!”,异常代码为“ERR_FILE_READ_FAIL”
12. 写入一个字符
声明:void SetAt(BYTE ) throw()
重载:void SetAt(BYTE ) throw()
可见性:public
返回值:void
功能: 在当前游标位置或在long参数指定位置写入一个BYTE
注:当long参数小0或大于文件总长度的时候,则函数默认向文件首或文件尾写入。
异常说明:当该函数调用出错的时候会抛出CPException异常,异常中错误代码和错误信息如下:
I. 若调用前没有用Open打开文件,则会抛出CPException异常,异常信息为“文件未打开!”,异常代码为“ERR_FILE_NOT_OPEN”
II. 读取失败的时候,错误提示为“文件写入失败!”,异常代码为“ERR_FILE_WRITE_FAIL”
13. 定位到文件首
声明:void FileSeekToBegin() throw()
可见性:public
返回值:void
功能: 将游标定位到文件首
异常说明:若调用前没有用Open打开文件,则会抛出CPException异常,异常信息为“文件未打开!”,异常代码为“ERR_FILE_NOT_OPEN”
14. 定位到文件尾
声明:void FileSeekToEnd() throw()
可见性:public
返回值:void
功能: 将游标定位到文件尾
异常说明:若调用前没有用Open打开文件,则会抛出CPException异常,异常信息为“文件未打开!”,异常代码为“ERR_FILE_NOT_OPEN”
15. 定位到第N行行首
声明:bool FileSeekToNRow(int nRow) throw()
可见性:public
返回值:bool
功能: 将游标定位到第nRow行的行首,执行成功返回true,失败返回false,出现异常时抛出CPException异常
注:采用二进制方式打开文件的时候,该函数操作无意义且游标位置的打乱可能影响程序的正常运行。
异常说明:若调用前没有用Open打开文件,则会抛出CPException异常,异常信息为“文件未打开!”,异常代码为“ERR_FILE_NOT_OPEN
16. 将游标定位到文件指定位置
声明:long FileSeek(UINT,UINT) throw()
可见性:public
返回值:long
功能: 将游标定位到指定位置。第一个参数UINT表示从起始位置,第二个UINT表示移动的偏移量。
应用举例:
m_File.FileSeek(FILE_SEEK_BEGIN,100);
m_File.FileSeek(100,20);
m_File.FileSeek(100,20);
标志类型说明:
FILE_SEEK_BEGIN:文件首标志
FILE_SEEK_END :文件尾标志
FILE_SEEK_CURRENT:当前位置标志
异常说明:若调用前没有用Open打开文件,则会抛出CPException异常。
I. 当执行该操作前没有使用Open打开文件,则抛出异常信息为“文件未打开!”,异常代码为“ERR_FILE_NOT_OPEN
II. 如果文件游标移动失败,则抛出的异常信息为“文件游标移动失败!”,异常代码为“ERR_FILE_CURSOR_MOVE_FAIL”
17. 返回当前操作文件的路径和文件名
声明:char *GetFilePathName()
可见性:public
返回值:char *
功能: 返回当前正在操作文件的全名。当没有打开时,文件名返回NULL
三.静态方法
1. 判断文件是否存在
声明:static bool IsExist(char *psFilePathName);
可见性:public
返回值:bool
功能: 判断文件是否存在,如果存在返回true,否则返回false。
2. 根据文件全名建立文件夹
声明:static bool MkDir(char *psFilePathName)
可见性:public
返回值:bool
功能: 根据文件全名创建文件夹
注:该功能暂不开放。