delphi中无类型文件读写
2010-09-10 17:36
281 查看
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.
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.
相关文章推荐
- Delphi中用于读写(I/O)的三种文件类型
- delphi中无类型文件读写
- delphi中无类型文件读写
- Delphi中用于读写(I/O)的三种文件类型
- 使用IniEditor读写INI类型配置文件
- delphi中转换office word文件为HTML文件,或者其它类型的文件的一些总结
- Wma 格式歌曲信息文件结构,附读写类(Delphi)
- Linux文件类型及如何查看,修改文件读写权限
- delphi中的各种文件类型介绍【转】
- delphi 编程入门一 常见文件类型
- Delphi如何处理不同类型的文件
- *Delphi ini文件读写
- Java 文件读写(txt类型读写并追加内容)
- 标C编程笔记day05 函数声明、文件读写、联合类型、枚举类型
- Delphi读写INI文件
- Delphi 7使用自定义图标关联文件类型
- Delphi中的文件类型
- Delphi6函数大全之-SysUtils.pas(关于文件读写和盘符访问)
- Delphi : Opendialog 文件过滤类型,文件多选, 使用多文件
- Delphi中读写INI配置文件操作总结