首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

流读写WriteBuffer函数参数请问

2012-03-03 
流读写WriteBuffer函数参数请教function Cjt_AddtoFile(SourceFile, TargetFile: string): BooleanvarTar

流读写WriteBuffer函数参数请教
function Cjt_AddtoFile(SourceFile, TargetFile: string): Boolean;
var
  Target, Source: TFileStream;
  MyFileSize: integer;
begin
  try
  Source := TFileStream.Create(SourceFile, fmOpenRead or fmShareExclusive);//创建实例
  Target := TFileStream.Create(TargetFile, fmOpenWrite or fmShareExclusive);
  try
  Target.Seek(0, soFromEnd); // 往尾部添加资源
  Target.CopyFrom(Source, 0);
  MyFileSize := Source.Size + sizeof(MyFileSize); //计算资源大小,并写入辅程尾部
  Target.WriteBuffer(MyFilesize, SizeOf(MyFileSize));
  finally
  Target.Free;
  Source.Free;
  end;
  except
  Result := False;
  Exit;
  end;
  Result := True;
end;
1)
Target.Seek(0, soFromEnd); 
这里的seek是指定指针位置吗 如果是Target.Seek(-1, soFromEnd); 那么是不是文件的尾往前一个位置
2)
Target.CopyFrom(Source, 0);
这里的拷贝函数第2个参数为0时,设置source的position为0才拷贝source所有数据,但这个函数里没有设置position为0
是不是默认为0呢
3)
这里的MyFileSize := Source.Size + sizeof(MyFileSize); 为什么要加上sizeof(MyFileSize)
4)
Target.WriteBuffer(MyFilesize, SizeOf(MyFileSize));
这里的参数缓冲区为什么可以是一个integer类型的呀 我对缓冲区不懂哦 到底是啥 应该什么类型

希望老大们帮我解答其中的问题,谢谢了~~


[解决办法]
1)Target.Seek(0, soFromEnd); 指定指针位置,Target.Seek(-1, soFromEnd)是文件的尾往前一个位置
2)Source := TFileStream.Create...
Source的初始位置就为0
3)procedure WriteBuffer(const Buffer; Count: Longint);
 buff可以是任何类型的变量.


[解决办法]
漏一个个3)
MyFileSize := Source.Size + sizeof(MyFileSize); 
这是你程序中文件格式要求的,最终的文件长度是源文件的长加上一个整形的长度:
Target.WriteBuffer(MyFilesize, SizeOf(MyFileSize));
比源文件多写了一个integer

[解决办法]
1.Seek:此方法实现流中读取指针的移动。函数原形为:
Function Seek(Offset:Longint;Origint:Word):Longint;virtual;abstract;
参数Offset为偏移字节数,参数Origint指出Offset的实际意义,其可能的取值如下:
soFromBeginning:Offset为移动后指针距离数据开始的位置。此时Offset必须大于或者等于零。
soFromCurrent:Offset为移动后指针与当前指针的相对位置。
soFromEnd:Offset为移动后指针距离数据结束的位置。此时Offset必须小于或者等于零。该方法返回值为移动后指针的位置。

2.此方法的作用是从其它流中拷贝数据流。函数原形为:
Function CopyFrom(Source:TStream;Count:Longint):Longint;
参数Source为提供数据的流,Count为拷贝的数据字节数。当Count大于0时,CopyFrom从Source参数的当前位置拷贝Count个字节的数据;当Count等于0时,CopyFrom设置Source参数的Position属性为0,然后拷贝Source的所有数据;

3.因为你这里要在流的尾部添加1个integer类型数值(当前流的大小)

4.WriteBuffer:此方法的作用是在当前位置向流写入数据,把你上面计算的当前流的大小写入流的尾部。

热点排行