打印本文 打印本文 关闭窗口 关闭窗口
项目迭代开发手记--文件分割存储用例的实现过程(3)
作者:武汉SEO闵涛  文章来源:敏韬网  点击数2122  更新时间:2009/4/23 18:28:29  文章录入:mintao  责任编辑:mintao
oryStream;

  lCompressionStream: TCompressStream;

begin

  StreamIncise := TStreamIncise.Create;

  lStream := TMemoryStream.Create;

  lCompressionStream := TCompressStream.Create;

  StreamIncise.LoadFromStream(FStream);

  StreamIncise.SetStreamDefault;

  try

    for I := 0 to StreamIncise.IncisedCount - 1 do

    begin

      StreamIncise.GetInciseStream(lStream); //获得分割流

      ClientDataSet2.Append;

      ClientDataSet2.FieldByName(''''F_ID'''').Value := I; //取序列号

      ClientDataSet2.FieldByName(''''F_NAME'''').Value := FFileFullName;

      ClientDataSet2.FieldByName(''''F_SERIAL'''').Value := I; // 取每次分割的序列号

      lCompressionStream.CompressStream(lStream);

      (ClientDataSet2.FieldByName(''''F_BINARY_DATA'''')

 as TBlobField).LoadFromStream(lStream);

      ClientDataSet2.Post;

    end;

  finally

    StreamIncise.Free;

    lStream.Free;

    lCompressionStream.Free;

  end;

end;

最后我们增加了InciseSize 属性,让程序员在创建类以后可以自己修改分割块的大小。

通过这样的调用,我们就可以把分割类具体的保存业务的耦合解开,从而增加了分割类下次被重用的可能性。在查阅资料过程中我们也找到一些分割的例子,只是都跟具体的业务耦合得很紧密,要重用该代码除了粘贴复制以外基本上没有他法。

这样当迭代3完成的时候我们实现了对了流的分割压缩,文件分割存储用例到这里获得一个好的解决方案,通过小步的迭代前进我们可以在每一次迭代结束的时候获得可以使用的功能代码,剩下来就使考虑图档文件的格式问题了。其实更主要的通过这次开发我们让新加入的组员获得了一次很好的编程培训,更容易理解要实现一个功能的具体思路和步骤。

上一页  [1] [2] [3] 

打印本文 打印本文 关闭窗口 关闭窗口