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

还是流读写writebuffer有关问题

2012-03-08 
还是流读写writebuffer问题前天发了帖子http://topic.csdn.net/u/20100323/12/8655ac22-1901-4e6c-970a-ca

还是流读写writebuffer问题
前天发了帖子
http://topic.csdn.net/u/20100323/12/8655ac22-1901-4e6c-970a-ca0f428fda36.html?32517
回答基本上都看懂了 谢谢大家的热心 但对里面的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;

//=============================

主要呢还是那句Target.WriteBuffer(MyFilesize, SizeOf(MyFileSize));
不明白~~~里面的两个参数我现在都搞糊涂了,后一个参数好理解,就是向流的当前位置写入多少大小的,
但第一个参数是什么意思呢,缓冲区又是怎么样一个概念,是一个内存地址吗,为什么是string类型的要用str[1]
作为参数,而integer的直接用定义的变量名,希望大哥大姐们救我,还想问的是变量的内存开辟啊,是不是局部
变量的integer自动会有内存,而string不是,又记得人家说string是指针,我晕,头脑晕晕的,吃饭都不开心啊,
我想弄明白,大家来帮帮我这只菜鸟吧~~~祝大家新年好


[解决办法]
Target.WriteBuffer(MyFilesize, SizeOf(MyFileSize)); 

不就是把“MyFilesize”的值写进入去吗
[解决办法]
1、第一个参数的意思就是你要写入的类容,
2.缓冲区就是1块已经申请好的内存
3.因为string是delphi里面比较特殊的数据类型 真正存放字符是从str[1]开始的,你会问前面几个字节呢? 前面8个字节分别存放的是长度和引用计数,这个一般的时候不会用到! 你只要记住delphi中string类型存在字符是从string[1]开始的。具体的你可以研究下string结构,你就明白了

4.integer只所以用变量名,是因为它是简单数据类型和其他一些数据类型(如: string,record...)分配内存的方式不一样.简单数据类型是直接在栈中分配的内存,变量名就代表该块内存。但是record,string类型是在堆中分配地,变量名仅仅是对申请的该块内存的1个引用。

热点排行