zoukankan      html  css  js  c++  java
  • 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:	empinary.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:	emp	est1.dat'); //假定有这个文件  
      Reset(FromF, 1);  
      AssignFile(ToF, 'c:	emp	est2.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.  
    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: empinary.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. (*显示结果: 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: emp est1.dat'); //假定有这个文件  
    181.   Reset(FromF, 1);  
    182.   AssignFile(ToF, 'c: emp est2.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.  
    好的代码像粥一样,都是用时间熬出来的
  • 相关阅读:
    [POJ2456]Aggressive cows(贪心,二分查找)
    [POJ1064]Cable master
    [Hadoop]单机尝试安装并测试Hadoop2.7.1(附带注释脚本)
    [HDOJ5500]Reorder the Books
    [UVA11076]Add Again
    [BNU弱校联萌]背水一战
    [HDOJ4911]Inversion
    POJ2735/Gym 100650E Reliable Nets dfs
    Gym 100650H Two Ends DFS+记忆化搜索
    HDU 4292 Food 最大流
  • 原文地址:https://www.cnblogs.com/jijm123/p/13416059.html
Copyright © 2011-2022 走看看