-
delphi中无类型文件读写
- unit Unit1;
-
- interface
-
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, StdCtrls;
-
- type
- TForm1 = class(TForm)
- Memo1: TMemo;
- Button1: TButton;
- Button2: TButton;
- Button3: TButton;
- Button4: TButton;
- Button5: TButton;
- Button6: TButton;
- Button7: TButton;
- procedure Button1Click(Sender: TObject);
- procedure Button2Click(Sender: TObject);
- procedure Button3Click(Sender: TObject);
- procedure Button4Click(Sender: TObject);
- procedure Button5Click(Sender: TObject);
- procedure Button6Click(Sender: TObject);
- procedure Button7Click(Sender: TObject);
- private
- { Private declarations }
- public
- { Public declarations }
- end;
-
- var
- Form1: TForm1;
-
- implementation
-
- {$R *.dfm}
-
- const
- FileName = 'c:/temp/binary.dat';
- var
- F: file;
-
- //用无类型的方式写入一个字节
- procedure TForm1.Button1Click(Sender: TObject);
- var
- b: Byte;
- begin
- AssignFile(F,FileName);
- Rewrite(F,1); //第二个参数表示: 把 1 个字节当作一个写入单位
-
- b := 65;
- BlockWrite(F,b,1); //写入; 参数2是要写入的内容; 参数3表示写入 1 次.
-
- CloseFile(F);
- //落实 binary.dat 的大小: 1个字节; 内容: A (可用记事本打开)
- end;
-
-
- //用无类型的方式读出一个字节
- procedure TForm1.Button2Click(Sender: TObject);
- var
- b: Byte;
- begin
- AssignFile(F,FileName);
- Reset(F,1); //把 1 个字节当作一个读取单位
-
- BlockRead(F,b,1); //读取一次; 放入 b
- ShowMessage(Chr(b)); //A
-
- CloseFile(F);
- end;
-
-
- //写入更多字节
- procedure TForm1.Button3Click(Sender: TObject);
- var
- buffer: array[0..127] of Byte;
- i: Integer; //储存多个字节, 需要用数组了
- begin
- for i := Low(buffer) to High(buffer) do
- buffer[i] := i; //给数组赋值, 注意现在数组大小是 128
-
- AssignFile(F,FileName);
- Rewrite(F,32); //规定把 32 个字节当作一个读取单位, 注意这个数字和缓冲区大小必须是倍数关系
-
- BlockWrite(F,buffer,4); //需要写入几次呢? 128/32=4
-
- CloseFile(F);
- //写成的文件肯定是128字节大小, 但用记事本可能看不了, 因为这个二进制不是文本
- end;
-
-
- //读出
- procedure TForm1.Button4Click(Sender: TObject);
- var
- buffer: array[0..127] of Byte;
- i: Integer;
- begin
- AssignFile(F,FileName);
- Reset(F,4); //把 4 字节当作一个读取单位; 为了那个倍数关系, 这里一般是 1
-
- BlockRead(F,buffer,32); //当然需要 32 次才能读完
-
- CloseFile(F);
-
- //怎么显示一下呢? 还是用 Memo 吧; 显示字符? 数字? 还是十六进制吧
- Memo1.Clear;
- for i := Low(buffer) to High(buffer) do
- begin
- Memo1.Lines.Add(IntToHex(buffer[i],1));
- end;
- (*显示结果: 0 1 2 3 ... 7D 7E 7F *)
-
- end;
-
-
- //读写 Char 与实际读写字节
- procedure TForm1.Button5Click(Sender: TObject);
- var
- cArr1,cArr2: array[0..4] of Char;
- i: Integer;
- num: Integer; //记录实际读写的字节数
- begin
- for i := Low(cArr1) to High(cArr1) do
- cArr1[i] := Chr(65+i); //填充 A B C D E
-
- AssignFile(F,FileName);
- Rewrite(F,1); //建立
-
- BlockWrite(F,cArr1,Length(cArr1),num); //参数4: num 是实际写入的字节数
- ShowMessage(IntToStr(num)); //5
-
- Reset(F,1); //重新打开
-
- BlockRead(F,cArr2,Length(cArr2),num); //参数5: num 是实际读出的字节数
- ShowMessage(IntToStr(num)); //5
-
- ShowMessage(cArr2); //ABCDE
-
- CloseFile(F);
- end;
-
-
- //写入长字符串, 读出其十六进制码
- procedure TForm1.Button6Click(Sender: TObject);
- var
- p: PChar;
- b: Byte;
- begin
- p := '万一的 Delphi 博客';
-
- AssignFile(F,FileName); //关联文件名
- Rewrite(F,1); //创建并打开
- BlockWrite(F,p,Length(p)); //写入
-
-
- FileMode := fmOpenRead; //这时可以设文件为只读
- Reset(F,1); //为读取打开
-
- Memo1.Clear;
- while not Eof(F) do
- begin
- BlockRead(F,b,1);
- Memo1.Text := Memo1.Text + IntToHex(b,2) + ' ';
- end;
- //显示结果: 70 F0 45 00 08 F7 12 00 A6 FB 43 00 A0 1A E5 00 FF C5
-
- CloseFile(F);
- end;
-
-
- //复制个文件
- procedure TForm1.Button7Click(Sender: TObject);
- var
- FromF,ToF: file;
- NumRead,NumWritten: Integer;
- Buffer: array[1..2048] of Byte;
- begin
- AssignFile(FromF, 'c:/temp/test1.dat'); //假定有这个文件
- Reset(FromF, 1);
- AssignFile(ToF, 'c:/temp/test2.dat');
- Rewrite(ToF, 1);
-
- repeat
- BlockRead(FromF, Buffer, SizeOf(Buffer), NumRead);
- BlockWrite(ToF, Buffer, NumRead, NumWritten);
- until (NumRead = 0) or (NumWritten <> NumRead);
- { NumRead=0 表示读完了; NumWritten <> NumRead 表示磁盘空间不够了 }
-
- CloseFile(FromF);
- CloseFile(ToF);
- end;
-
- end.
-
相关阅读:
WINFORM中的COMBOX模糊查询
C#的XML序列化及反序列化
C#调用webservice简单实例
ORACLE简单触发器
关于搭建webservice以及无法通过URL访问的简易解决办法
URL类型入参串调用接口
起点
dom的操作
固定定位
字体、文本属性和背景图定位
-
原文地址:https://www.cnblogs.com/rayz/p/2913766.html
Copyright © 2020-2023
润新知