优秀的毕业设计论文网
计算机 JAVA 电子信息 单片机 机械机电 模具 土木工程 建筑结构 论文
热门搜索词:网络 ASP.NET 汽车 电气 数控 PLC

145_基于纠错码的容错技术的研究——X码

以下是资料介绍,如需要完整的请充值下载.
1.无需注册登录,支付后按照提示操作即可获取该资料.
2.资料以网页介绍的为准,下载后不会有水印.资料仅供学习参考之用.
  
资料介绍:

3 基于X码的文件恢复模块分析与设计
3.1 基于X码的文件恢复的模块功能图
采用X码简单模拟实现一个文件恢复软件:假设文件被放在(n-2)*n的阵列中,利用X码的编码算法重新构造出2行奇偶校验文件行,从而构成一个n*n的文件矩阵,当文件矩阵中任意2列文件信息块丢失或出错时,可以利用X码的译码算法,将缺失的2列文件信息块恢复出来,从而恢复文件。其模块功能图如图1:

【买计算机毕业论文就到计算机毕业论文网】 think58好,好think58 [资料来源:http://www.THINK58.com]

think58.com

[来源:http://www.think58.com]

[来源:http://www.think58.com]

think58好,好think58

[资料来源:http://think58.com]


图 1 基于X码的功能模块图
X码的编译码过程和文件的处理功能的完成是由CFileReCover这个类来完成的 ,通过CFileReCover这个类可以完成文件的随机产生功能,和文件分割产生功能,并对产生的文件矩阵进行编码和译码功能。
class CFileReCover
{
public:
BOOL RecoverDataFromChains(BYTE nChainNum);//定义斜率
BOOL DecodeDatas(const CString fileName,const UINT nColNum,const UINT nSize,const UINT nColNeedi,const UINT nColNeedj);//译码函数
BOOL EncodeDatas(const CString fileName,const UINT nCol,const UINT nSize);//编码函数
BOOL CreateTestFiles(const CString strFileName,const UINT nCol,const UINT nSize);//文件随机产生
BOOL CreateTestFiles1(const CString strFileName,const UINT nCol);//文件分割产生
BOOL IsPrimeNum(const UINT n);//矩阵列数初始函数
CFileReCover();
virtual ~CFileReCover();
private:
UINT m_nFileSize;//文件大小
UINT m_nColumn;//矩阵列数
UINT m_needColI;//缺失信息块列数
UINT m_needColJ;//缺失信息块列数
CString m_strFileName;//文件名

think58好,好think58

[来源:http://think58.com]


CString m_strFilePath;//文件路径
3.2 文件随机产生模块功能
通过随机向文件内随机装填随机字符产生随机文件,构造成一个(n-2)*n的文件矩阵。
首先创建根据列数n创建n*(n-2)个相同大小的文件,并保存再一个创建好的文件夹里,通过设定文件下角标i和j(i为行数,j为列数)的值来设定一个文件在矩阵中的位置,构成一个(n-2)*n的文件矩阵。最后根据文件在矩阵中的位置的顺序打开每个文件并向里面装填随机产生的字符,这样就构成了一个随机产生的(n-2)*n的文件矩阵。
代码片段如下:
BOOL CFileReCover::CreateTestFiles(const CString strFileName,const UINT nCol,const UINT nSize)//文件随机产生

srand((UINT)time(NULL));//随机种子
CreateDirectory("files",NULL);//创建文件夹
CFile fileToCreate;
CString strTempNum; //文件下标号
BYTE nChar;
for(UINT i=0;i<nCol-2;i++)
{
for(UINT j=0;j<nCol;j++)
{
strTempNum.Format (_T("%ld_%ld"),i,j);

think58

[资料来源:http://THINK58.com]

[来源:http://think58.com]

//打开(创建)文件
fileToCreate.Open ("files//"+strFileName+strTempNum,
CFile::modeCreate |CFile::modeWrite ,
NULL);
//写文件
for(UINT j=0;j<nSize;j++)
{
nChar=rand()%0x4a+0x30; //随机产生字符
fileToCreate.Write(&nChar,1);
}

3.3 文件分割产生模块功能
将一个指定的文件根据列数,分割产生为n*(n-2)个文件,并构造成一个(n-2)*n的文件矩阵。
首先先选定一个文件(也就是要分割的文件),再根据我们要建造的文件矩阵列数n,来将文件分割成n*(n-2)个文件,再根据一个文件在被分割后是第几个文件和矩阵的列数来求出这个的小标号,也就是来判断这个文件在(n-2)*n的矩阵中的位置,按这样的算法求出每个文件在矩阵中的位置,这样每个文件的位置都确定了,就能构成一个由分割文件产生(n-2)n的文件矩阵。
代码片段如下:
BOOL CreateTestFiles1(const CString strFileName,const UINT nCol);//文件分割产生

count=m_filecol*(m_filecol-2);//文件分割个数

AfxMessageBox(num);
for(int i=0;i<count;i++) think58.com

[资料来源:http://think58.com]


{
CString name//文件下标号
l=i/m_filecol;//行数
n=i-l*m_filecol;//列数
name.Format (_T("%ld_%ld"),l,n);
CFile pp;
pp.Open(name,CFile::modeWrite|CFile::modeCreate,NULL);//写文件
p.SetPos(i+1);
ff.Seek(i*c,CFile::begin);
if((len-i*c)<c)
c=len-i*c;

3.4 编码模块功能
分别在上面2种情况产生的(n-2)*n的文件矩阵的基础上,按照编码算法,再产生2行校验行,构造成一个n*n的文件矩阵。
根据公式1第1行校验行各奇偶校验位的值是各自沿着斜率为-1的对角线的校验和(即异或),每条对角线都是从第0行上的一个信息位上起始的,再沿着斜率为-1的对角线就能求出第1行校验行行的校验位的值了,只要确定是从第0行的第几列开始的也就能确定求出的校验位的值是第几列的,从而确定这个校验位在n*n矩阵中的位置。这样求出的每个校验位都能找到在校验行中的位置,也就确定了第一行校验行。
代码片段如下:
BOOL CFileReCover::EncodeDatas(const CString fileName,const UINT nCol,const UINT nSize)//编码

//====产生第一行校验文件=========================

copyright think58 [来源:http://think58.com]


{ //打开并读入第一个文件
strCheckFileNum.Format (_T("%ld_%ld"),0,i);
if(!tempFile.Open ("files//"+fileName+strCheckFileNum,
CFile::modeRead,
NULL))
return FALSE;
tempFile.Read (tempBuffer,nSize);
//创建校验文件
strCheckFileNum.Format (_T("%ld_%ld"),nCol-2,(i+nCol-2)%nCol);
if(!checkFile.Open ("files//"+fileName+strCheckFileNum,
CFile::modeCreate|CFile::modeWrite,
NULL))

//从第二个文件开始与第一个文件中的内容异或
for(col=1,row=(i+1)%nCol;col<nCol-2;++col,row=(row+1)%nCol)
{
strCheckFileNum.Format (_T("%ld_%ld"),col,row);
if(!tempFile.Open ("files//"+fileName+strCheckFileNum,
CFile::modeRead,
NULL))
return FALSE;
tempFile.Read (tempBuffer2,nSize);
//异或
for(j=0;j<nSize;j++)
{
tempBuffer[j]^=tempBuffer2[j]; think58

[来源:http://think58.com]

}

第二行校验行各奇偶校验位的值是各自沿着斜率为+1的对角线的校验和。求法和第一行校验行的类似只是,第二行校验行是沿着斜率为+1的对角线求出的。2行校验行上的校验位的位置和值都已经确定了,就能构造出n*n的矩阵了。
本文来自think58 [来源:http://think58.com]