1. 建立一个 TFileStream for write 2. call FileStream.Write(@yourRecVariable, sizeof(TyourRec)) 3. 释放FileStream write ok1. 建立一个 TFileStream for read 2. call FileStream.Read(@yourRecVariable, sizeof(TyourRec)); 3. 释放FileStream read ok
var FromF, ToF: file; NumRead, NumWritten: Integer; Buf: array[1..2048] of Char; begin if OpenDialog1.Execute then { Display Open dialog box } begin AssignFile(FromF, OpenDialog1.FileName); Reset(FromF, 1); { Record size = 1 } if SaveDialog1.Execute then { Display Save dialog box} begin AssignFile(ToF, SaveDialog1.FileName); { Open output file } Rewrite(ToF, 1); { Record size = 1 } Canvas.TextOut(10, 10, 'Copying ' + IntToStr(FileSize(FromF)) + ' bytes...'); repeat BlockRead(FromF, Buf, SizeOf(Buf), NumRead); BlockWrite(ToF, Buf, NumRead, NumWritten); until (NumRead = 0) or (NumWritten <> NumRead); CloseFile(FromF); CloseFile(ToF); end; end; end;
to comanche(太可怕) 我照你的方法写了这样一段代码 var dd:Tzhao; fw:TFilestream; begin dd.inkdata:=ciccink1.Ink;{ciccink1.ink是控件的一个属性widestring型的,Tzhao是定义的结构} fw:=TFilestream.Create('d:\tata.dat',fmCreate); fw.Write(dd,sizeof(dd)); fw.Free;读是这样写的 var tt:Tzhao; fw:TFilestream; begin fw:=TFilestream.Create('d:\tata.dat',fmopenread); fw.read(tt,sizeof(tt)); fw.Free; ciccink1.Ink:=tt.inkdata; end;可这样写出来的文件,读的时候总是报错。为什么呢?? 如果不用widestring型就可以
to outer2000(天外流星)我明白你的意思,你是复制一个文件,这个我明白呀,我现在想要的是自己定义的格式文件。如一个widestring类型量,按一定格式存入文件
还有一点问题: TZhao = record yourWideString :array of WideChar; end; var ff:Tzhao; aa:widestring; begin aa:=ciccink1.ink; setlength(ff.inkdata,sizeof(aa));//这样对吗?能不能取到实际的大小? ShowMessage(string(ciccink1.ink));//这边正常显示,没问题 Move(aa,ff.inkdata,sizeof(aa));//这边用法对不对? showMessage(string(ff.inkdata));//到这边的时候怎么显示不对了???? end;请再帮助回答一下
TDateRec = record
Year: Integer;
Month: (Jan, Feb, Mar, Apr, May, Jun,
Jul, Aug, Sep, Oct, Nov, Dec);
Day: 1..31;
end;我现在给这个结构放入数据,要把他存成文件,怎么写。存成文件后,怎么再读出来?
Writeln()写文件一行
Read()读文件指定个字节
Write()写文件指定个字节
其实这样的问题自己看一下书就搞定了,很简单啊
1. 建立一个 TFileStream for write
2. call FileStream.Write(@yourRecVariable, sizeof(TyourRec))
3. 释放FileStream
write ok1. 建立一个 TFileStream for read
2. call FileStream.Read(@yourRecVariable, sizeof(TyourRec));
3. 释放FileStream
read ok
NumRead, NumWritten: Integer;
Buf: array[1..2048] of Char;
begin
if OpenDialog1.Execute then { Display Open dialog box }
begin
AssignFile(FromF, OpenDialog1.FileName);
Reset(FromF, 1); { Record size = 1 }
if SaveDialog1.Execute then { Display Save dialog box}
begin
AssignFile(ToF, SaveDialog1.FileName); { Open output file } Rewrite(ToF, 1); { Record size = 1 }
Canvas.TextOut(10, 10, 'Copying ' + IntToStr(FileSize(FromF))
+ ' bytes...');
repeat
BlockRead(FromF, Buf, SizeOf(Buf), NumRead);
BlockWrite(ToF, Buf, NumRead, NumWritten);
until (NumRead = 0) or (NumWritten <> NumRead);
CloseFile(FromF);
CloseFile(ToF);
end;
end;
end;
我照你的方法写了这样一段代码
var
dd:Tzhao;
fw:TFilestream;
begin
dd.inkdata:=ciccink1.Ink;{ciccink1.ink是控件的一个属性widestring型的,Tzhao是定义的结构}
fw:=TFilestream.Create('d:\tata.dat',fmCreate);
fw.Write(dd,sizeof(dd));
fw.Free;读是这样写的
var
tt:Tzhao;
fw:TFilestream;
begin
fw:=TFilestream.Create('d:\tata.dat',fmopenread);
fw.read(tt,sizeof(tt));
fw.Free;
ciccink1.Ink:=tt.inkdata;
end;可这样写出来的文件,读的时候总是报错。为什么呢??
如果不用widestring型就可以
type myLayer_type=record
Name:array[0..256] of char; //图层名称
Color:tcolor; //颜色
CharacterIndex:integer; //
// Font:tfont;
Outline:boolean; //是否显示边界线
Outlinecolor:tcolor; //边界线颜色
Size:integer; //字体大小
Style:integer; //符号形状或线形或填充符号
Ltype:integer; //图形类型
Lfield:array[0..12] of char; //注记字段名称
Scale:double; //显示比例
index:integer; //图层位置
end;
写进去
write(prjDefault,mylayer);
读出来
read(prjDefault,mylayer);
不要用什么WIDESTRING,直接用字符串。
dd.inkdata:=ciccink1.Ink;
这句不对, 它是引用到 ciccink1.Ink, 写入时只是个引用地址(4byte)
要在 Tzhao 中存一个 WideString 必需如下
TZhao = record
yourWideString :array [0..xx] of WideChar;
end;move(yourSource, yourZhaoV.yourWideString, sizeof(source));
TZhao = record
yourWideString :array of WideChar;
end;
var
ff:Tzhao;
aa:widestring;
begin
aa:=ciccink1.ink;
setlength(ff.inkdata,sizeof(aa));//这样对吗?能不能取到实际的大小?
ShowMessage(string(ciccink1.ink));//这边正常显示,没问题
Move(aa,ff.inkdata,sizeof(aa));//这边用法对不对?
showMessage(string(ff.inkdata));//到这边的时候怎么显示不对了????
end;请再帮助回答一下
-8 byte 引用记数
-4 byte 数组长度
0..length 数组内容看上去像Delphi的String & C++Builder 的AnsiString.