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.
http://peirenlei.iteye.com/blog/319562
delphi中无类型文件读写的更多相关文章
- delphi中如何实现文件的复制?
http://zhidao.baidu.com/link?url=nyAzCpeXAbaT8M3qqAePCF1Zr7q-oK4hpAUNIaRYpHcbmIwYsLr1TXoTt8759HtR1EB ...
- DELPHI中枚举类型数据的介绍和使用方法
在看delphi程序的时候看到aa=(a,b,c,d);这样的东西,还以为是数组,同事说是函数,呵呵,当然这两个都不屑一击,原来这样式子是在声明并付值一个枚举类型的数据.下边写下来DELPHI中枚举类 ...
- delphi中的各种文件类型介绍【转】
1.DPR: Delphi Project文件,包含了Pascal代码.应用系统的工程文件2.PAS: Pascal文件,Pascal单元的源代码,可以是与窗体有关的单元或是独立的单元.3.DFM:D ...
- delphi中的各种文件类型介绍
1.DPR: Delphi Project文件,包含了Pascal代码.应用系统的工程文件2.PAS: Pascal文件,Pascal单元的源代码,可以是与窗体有关的单元或是独立的单元.3.DFM:D ...
- 在Delphi中编写res文件
delphiimagedosinterfaceborland脚本先用记事本编写一个rc的文件. 如内容为: _Comms RCData Comms.jpg Comms.jpg为图片名称, 然后在这个r ...
- 在Delphi中编辑res文件
先用记事本编写一个rc的文件.如内容为:_Comms RCData Comms.jpg Comms.jpg为图片名称,然后在这个rc文件和图片拷贝到delphi安装路径的bin文件夹里面,选中这两个文 ...
- C#中的CSV文件读写
目录 CSV文件标准 文件示例 RFC 4180 简化标准 读写CSV文件 使用CsvHelper 使用自定义方法 基于简化标准的写CSV文件 使用TextFieldParser解析CSV文件 使用正 ...
- Go中简单的文件读写
Go中的ioutil包可以方便的实现文件读写.代码: package main import ( "fmt" "io/ioutil" ) func main() ...
- Delphi中String类型原理介绍
Delphi中字符串的操作很简单,但幕后情况却相当复杂.Pascal传统的字符串操作方法与Windows不同,Windows吸取了C语言的字符串操作方法.32位Delphi中增加了长字符串类型,该类型 ...
随机推荐
- js window.onload事件
1.最简单的调用方式 直接写到html的body标签里面,如: ? 1 2 3 4 <html> <body onload="func()"& ...
- python3.4.3将汉字转换为大写拼音首字母
from pypinyin import pinyin a=pinyin(u'杨强',type=FIRST_LETTER) --->此时返回一个列表并赋给a(元素也是列表) b=[] - ...
- vim的漫漫长征路
在系统的学习vim之前,先在网上找了些教程大概了解下,因为首先我们要先将vim给用起来,然后在系统的学习过程中不断的充实自己对vim的理解. ----------------------------- ...
- 2014 HDU多校弟五场J题 【矩阵乘积】
题意很简单,就是两个大矩阵相乘,然后求乘积. 用 Strassen算法 的话,当N的规模达到100左右就会StackOverFlow了 况且输入的数据范围可达到800,如果变量还不用全局变量的话连内存 ...
- Chapter 8 工厂方法模式
工厂方法模式实现时,客户端需要决定实例化哪一个工厂来实现运算类,选择判断的问题还是存在的,也就是说,工厂方法把简单工厂的内部逻辑判断移到了客户端代码来进行.你想要加功能,本来是改工厂类的,而现在是修改 ...
- 浏览器hack总结 详细的浏览器兼容性解决方法
由于各浏览器对页面的解析不同,会导致页面在不同浏览器中显示的样式不一致,为了保持页面的统一,经常需要对浏览器进行兼容性问题的调试. CSS Hack 面对浏览器诸多的兼容性问题,经常需要通过CSS样式 ...
- shiro权限框架
权限的组成部分:用户 资源 角色 权限 数据库关系表设计是根据自己项目需求设计的 account表role表(id,rolename)account_role(id,aid,rid)permissio ...
- Flask web开发 请求拦截和预处理
我们在开发WEB应用时,往往会需要对所有的url请求进行拦截,做些预处理,比如权限处理.日志等统一处理. 本文介绍一下Flask中的处理机制.我们通过一个简单的例子来说明. 1.编写一个简单应用 ru ...
- 位操作 写读同步(无线) (语音1760 1700) ( 无线24l01)
************************************************************************** * 函数原型: unsigned char ISD ...
- UVA 10763 Foreign Exchange 出国交换 pair+map
题意:给出很多对数字,看看每一对(a,b)能不能找到对应的(b,a). 放在贪心这其实有点像检索. 用stl做,map+pair. 记录每一对出现的次数,然后遍历看看对应的那一对出现的次数有没有和自己 ...