delphi中无类型文件读写

  1. unit Unit1;   
  2.   
  3. interface   
  4.   
  5. uses   
  6.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,   
  7.   Dialogs, StdCtrls;   
  8.   
  9. type   
  10.   TForm1 = class(TForm)   
  11.     Memo1: TMemo;   
  12.     Button1: TButton;   
  13.     Button2: TButton;   
  14.     Button3: TButton;   
  15.     Button4: TButton;   
  16.     Button5: TButton;   
  17.     Button6: TButton;   
  18.     Button7: TButton;   
  19.     procedure Button1Click(Sender: TObject);   
  20.     procedure Button2Click(Sender: TObject);   
  21.     procedure Button3Click(Sender: TObject);   
  22.     procedure Button4Click(Sender: TObject);   
  23.     procedure Button5Click(Sender: TObject);   
  24.     procedure Button6Click(Sender: TObject);   
  25.     procedure Button7Click(Sender: TObject);   
  26.   private   
  27.     { Private declarations }   
  28.   public   
  29.     { Public declarations }   
  30.   end;   
  31.   
  32. var   
  33.   Form1: TForm1;   
  34.   
  35. implementation   
  36.   
  37. {$R *.dfm}   
  38.   
  39. const   
  40.   FileName = 'c:/temp/binary.dat';   
  41. var   
  42.   F: file;   
  43.   
  44. //用无类型的方式写入一个字节   
  45. procedure TForm1.Button1Click(Sender: TObject);   
  46. var   
  47.   b: Byte;   
  48. begin   
  49.   AssignFile(F,FileName);   
  50.   Rewrite(F,1); //第二个参数表示: 把 1 个字节当作一个写入单位   
  51.   
  52.   b := 65;   
  53.   BlockWrite(F,b,1); //写入; 参数2是要写入的内容; 参数3表示写入 1 次.   
  54.   
  55.   CloseFile(F);   
  56. //落实 binary.dat 的大小: 1个字节; 内容: A (可用记事本打开)   
  57. end;   
  58.   
  59.   
  60. //用无类型的方式读出一个字节   
  61. procedure TForm1.Button2Click(Sender: TObject);   
  62. var   
  63.   b: Byte;   
  64. begin   
  65.   AssignFile(F,FileName);   
  66.   Reset(F,1); //把 1 个字节当作一个读取单位   
  67.   
  68.   BlockRead(F,b,1); //读取一次; 放入 b   
  69.   ShowMessage(Chr(b)); //A   
  70.   
  71.   CloseFile(F);   
  72. end;   
  73.   
  74.   
  75. //写入更多字节   
  76. procedure TForm1.Button3Click(Sender: TObject);   
  77. var   
  78.   buffer: array[0..127] of Byte;   
  79.   i: Integer; //储存多个字节, 需要用数组了   
  80. begin   
  81.   for i := Low(buffer) to High(buffer) do   
  82.     buffer[i] := i; //给数组赋值, 注意现在数组大小是 128  
  83.   
  84.   AssignFile(F,FileName);   
  85.   Rewrite(F,32); //规定把 32 个字节当作一个读取单位, 注意这个数字和缓冲区大小必须是倍数关系   
  86.   
  87.   BlockWrite(F,buffer,4); //需要写入几次呢? 128/32=4  
  88.   
  89.   CloseFile(F);   
  90. //写成的文件肯定是128字节大小, 但用记事本可能看不了, 因为这个二进制不是文本   
  91. end;   
  92.   
  93.   
  94. //读出   
  95. procedure TForm1.Button4Click(Sender: TObject);   
  96. var   
  97.   buffer: array[0..127] of Byte;   
  98.   i: Integer;   
  99. begin   
  100.   AssignFile(F,FileName);   
  101.   Reset(F,4); //把 4 字节当作一个读取单位; 为了那个倍数关系, 这里一般是 1  
  102.   
  103.   BlockRead(F,buffer,32); //当然需要 32 次才能读完   
  104.   
  105.   CloseFile(F);   
  106.   
  107.   //怎么显示一下呢? 还是用 Memo 吧; 显示字符? 数字? 还是十六进制吧   
  108.   Memo1.Clear;   
  109.   for i := Low(buffer) to High(buffer) do   
  110.   begin   
  111.     Memo1.Lines.Add(IntToHex(buffer[i],1));   
  112.   end;   
  113. (*显示结果: 0 1 2 3 ... 7D 7E 7F *)   
  114.   
  115. end;   
  116.   
  117.   
  118. //读写 Char 与实际读写字节   
  119. procedure TForm1.Button5Click(Sender: TObject);   
  120. var   
  121.   cArr1,cArr2: array[0..4] of Char;   
  122.   i: Integer;   
  123.   num: Integer; //记录实际读写的字节数   
  124. begin   
  125.   for i := Low(cArr1) to High(cArr1) do   
  126.     cArr1[i] := Chr(65+i); //填充 A B C D E   
  127.   
  128.   AssignFile(F,FileName);   
  129.   Rewrite(F,1); //建立   
  130.   
  131.   BlockWrite(F,cArr1,Length(cArr1),num); //参数4: num 是实际写入的字节数   
  132.   ShowMessage(IntToStr(num)); //5  
  133.   
  134.   Reset(F,1); //重新打开   
  135.   
  136.   BlockRead(F,cArr2,Length(cArr2),num); //参数5: num 是实际读出的字节数   
  137.   ShowMessage(IntToStr(num)); //5  
  138.   
  139.   ShowMessage(cArr2); //ABCDE   
  140.   
  141.   CloseFile(F);   
  142. end;   
  143.   
  144.   
  145. //写入长字符串, 读出其十六进制码   
  146. procedure TForm1.Button6Click(Sender: TObject);   
  147. var   
  148.   p: PChar;   
  149.   b: Byte;   
  150. begin   
  151.   p := '万一的 Delphi 博客';   
  152.   
  153.   AssignFile(F,FileName);     //关联文件名   
  154.   Rewrite(F,1);               //创建并打开   
  155.   BlockWrite(F,p,Length(p));  //写入   
  156.   
  157.   
  158.   FileMode := fmOpenRead;     //这时可以设文件为只读   
  159.   Reset(F,1);                 //为读取打开   
  160.   
  161.   Memo1.Clear;   
  162.   while not Eof(F) do   
  163.   begin   
  164.     BlockRead(F,b,1);   
  165.     Memo1.Text := Memo1.Text + IntToHex(b,2) + ' ';   
  166.   end;   
  167.   //显示结果: 70 F0 45 00 08 F7 12 00 A6 FB 43 00 A0 1A E5 00 FF C5   
  168.   
  169.   CloseFile(F);   
  170. end;   
  171.   
  172.   
  173. //复制个文件   
  174. procedure TForm1.Button7Click(Sender: TObject);   
  175. var   
  176.   FromF,ToF: file;   
  177.   NumRead,NumWritten: Integer;   
  178.   Buffer: array[1..2048] of Byte;   
  179. begin   
  180.   AssignFile(FromF, 'c:/temp/test1.dat'); //假定有这个文件   
  181.   Reset(FromF, 1);   
  182.   AssignFile(ToF, 'c:/temp/test2.dat');   
  183.   Rewrite(ToF, 1);   
  184.   
  185.   repeat   
  186.     BlockRead(FromF, Buffer, SizeOf(Buffer), NumRead);   
  187.     BlockWrite(ToF, Buffer, NumRead, NumWritten);   
  188.   until (NumRead = 0) or (NumWritten <> NumRead);   
  189.   { NumRead=0 表示读完了; NumWritten <> NumRead 表示磁盘空间不够了 }   
  190.   
  191.   CloseFile(FromF);   
  192.   CloseFile(ToF);   
  193. end;   
  194.   
  195. end.  
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值