`
free_bird816
  • 浏览: 206037 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

无类型文件读写

阅读更多

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.

分享到:
评论

相关推荐

    文件读写监控工具文件读写监控工具文件读写监控工具

    文件读写监控工具是计算机系统管理和维护中不可或缺的软件,它们可以帮助用户跟踪、记录和分析系统中的文件操作,包括打开、创建、修改、删除等动作。这类工具在故障排查、性能优化、安全审计等方面有着广泛的应用。...

    android文件读写权限

    在Android应用开发中,文件读写权限是至关重要的一个环节,因为这关乎到应用程序能否正常地存储和访问数据。Android操作系统采用严格的权限管理系统,确保应用只能在其被授权的范围内操作。下面将详细介绍Android中...

    Android 文件读写操作

    在Android系统中,文件读写操作是开发过程中常见的任务,涉及到资源文件、数据区文件以及外部存储(如SD卡)的访问。以下是对这些操作的详细说明: 一、资源文件的读取 1. 从resource的raw中读取文件数据: 资源...

    文件读写,实现了不同格式的文件读写

    在“Ch16 文件读写”这个章节中,可能包含了关于以上各种文件读写方式的详细教程和实例代码,帮助开发者掌握不同类型的文件操作技巧,提升编程能力。学习这部分内容对于任何IT从业者来说都是基础且重要的,无论是...

    delphi 文件读写

    在Delphi编程环境中,文件读写是常见的操作,主要用于存储和检索数据。本文将深入探讨如何使用Delphi进行文本文件的读写操作,包括基本概念、常用函数和类,以及实际应用示例。 首先,了解文件系统的基本概念是至关...

    c文件读写函数

    下面将对这两种类型的文件读写函数进行详细介绍。 非标准文件读写函数 非标准文件读写函数主要用于读写二进制文件,包括 open、close、read 和 write 函数。 1. open 函数 open 函数用于打开文件,并返回一个...

    Android 13读写权限变更,小米14 txt 文件读写

    对于开发者来说,这意味着需要更新代码以适配这些新规则,尤其是在进行文件读写操作时。本文将详细探讨Android 13的读写权限变更,以及如何在小米14设备上处理txt文件的读写测试。 首先,理解Android 13中的存储...

    ini文件读写类

    "ini文件读写类"是一个专门用于处理ini文件的编程工具,其主要功能是方便程序员进行ini文件的数据读取和写入操作。 在Windows操作系统中,ini文件被大量用于保存用户配置和应用程序设置,因为它们易于理解和编辑,...

    verilog文件读写.doc

    Verilog文件读写 Verilog文件读写是指在Verilog语言中对文件的读取和写入操作,对于modelsim仿真和Matlab联合仿真尤其重要。本文将详细介绍Verilog文件读写的基本操作,包括文件打开和关闭、输出到文件、从文件读取...

    二进制文件读写操作

    在处理二进制文件时,控制文件读写位置是非常重要的,因为文件中的数据通常是连续的,且不同类型的变量可能在不同的位置。`fstream`类提供了`seekg`和`seekp`函数来改变文件读取和写入的位置。此外,`tellg`和`tellp...

    BMP文件的读写C代码及文档.rar

    这个压缩包“BMP文件的读写C代码及文档.rar”包含了关于如何使用C语言进行BMP文件读写操作的相关资料,包括一个PDF文档“BMP file format.pdf”和一个名为“readwriteBMP.rar”的源代码压缩包。 BMP文件格式的基础...

    C#文件的读写c#基础中文件读写课程中一些常用类

    本文将深入探讨C#中处理文件读写的一些常用类,主要包括`System.IO.File`和`System.IO.FileInfo`,以及它们提供的各种方法。 1. **System.IO.File 类** - `File.Open()`:这个方法用于打开一个现有的文件或创建一...

    文件读写in C++

    在C++编程中,文件读写是至关重要的一个部分,特别是在处理数据存储、日志记录或者数据交换等场景。本文将深入探讨如何使用C++的标准库`&lt;fstream&gt;`来进行文件的读取和写入操作,同时也将涉及FILE*类型的文件操作,这...

    MFC txt文件读写

    在这个"**MFC txt文件读写**"的实践中,我们将探讨如何利用MFC来处理文本文件的读取和写入操作。 首先,我们需要了解MFC中的CFile类,它是处理文件操作的基础。CFile类提供了打开、关闭、读取和写入文件的基本方法...

    iso文件读写函数.docx

    ISO文件读写是iOS开发中常见的操作,尤其是在处理数据存储或软件更新时。在iOS中,我们通常不直接处理ISO格式的文件,但这个标题可能是关于读写文件的一般概念,因为ISO通常指的是光盘映像文件。描述中提到的"创建...

    INI文件读写类

    总结来说,这个“INI文件读写类”是用VC6.0开发的,用于处理配置文件的读写操作,支持多种数据类型和UNICODE编码,提供了一种高效、方便的方式来管理和维护应用程序的配置信息。它包含的源代码和项目文件可以帮助...

    qt文件操作读写自定义类型

    本例程重点介绍了如何在Qt环境下,通过重载QDataStream的operator和operator&gt;&gt;来实现自定义类型的数据读写,从而简化对文件的操作。 首先,理解QDataStream类是Qt中处理二进制数据流的核心工具,它允许我们以结构化...

Global site tag (gtag.js) - Google Analytics