CreateFile FileSeek FileRead 直接读取数据
- unit Unit1;
- interface
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, StdCtrls, FileCtrl;
- type
- TForm1 = class(TForm)
- Button1: TButton;
- DriveComboBox1: TDriveComboBox;
- memosd: TMemo;
- procedure Button1Click(Sender: TObject);
- private
- { Private declarations }
- public
- { Public declarations }
- end;
- var
- Form1: TForm1;
- implementation
- {$R *.dfm}
- procedure TForm1.Button1Click(Sender: TObject);
- Var
- driver : pchar;
- block_size : Integer;
- start_num , total_num , num_tmp : Integer;
- hdevicehandle : thandle;
- i , j , k : Integer;
- C : Char;
- fbuf : pchar;
- hex_str , char_str , tmp_str : String;
- tem_id : String;
- trans_no_tmp : String;
- num : String;
- bu_count , trans_count : Integer;
- Begin
- driver := pchar('\\.\' + DriveComboBox1.Drive + ':');
- block_size := 512;
- start_num := 0;
- total_num := 1;
- hdevicehandle := CreateFile(driver , GENERIC_ALL , FILE_SHARE_READ Or FILE_SHARE_WRITE , Nil , OPEN_EXISTING , 0 , 0);
- If (hdevicehandle <> INVALID_HANDLE_VALUE) Then
- Begin
- fbuf := allocmem(total_num * block_size);
- FileSeek(hdevicehandle , start_num * block_size , 0);
- If FileRead(hdevicehandle , fbuf[0] , total_num * block_size) <> total_num * block_size Then
- Raise exception.Create('读磁盘错误!');
- char_str := strpas(fbuf);
- memosd.Lines.Add('字符【' + char_str + '】');
- memosd.Lines.Add('读取包头结束!');
- freemem(fbuf);
- closehandle(hdevicehandle);
- End;
- tmp_str := copy(char_str , 1 , 10);
- If trystrtoint(tmp_str , bu_count) = false Then
- Begin
- memosd.Lines.Add('补货记录总条数不是合法的整数!');
- exit;
- End;
- tmp_str := '';
- tmp_str := copy(char_str , 11 , 10);
- If trystrtoint(tmp_str , trans_count) = false Then
- Begin
- memosd.Lines.Add('交易记录总条数不是合法的整数!');
- exit;
- End;
- tem_id := copy(char_str , 21 , 8);
- // del_bu_tmp(tem_id);
- //write_bu_con_tmp(tem_id , inttostr(bu_count) , '');
- start_num := 1;
- While start_num <= bu_count Do
- Begin
- hdevicehandle := CreateFile(driver , GENERIC_ALL , FILE_SHARE_READ Or FILE_SHARE_WRITE , Nil , OPEN_EXISTING , 0 , 0);
- If (hdevicehandle <> INVALID_HANDLE_VALUE) Then
- Begin
- fbuf := allocmem(block_size);
- FileSeek(hdevicehandle , start_num * block_size , 0);
- If FileRead(hdevicehandle , fbuf[0] , block_size) <> block_size Then
- Raise exception.Create('读磁盘错误!');
- char_str := strpas(fbuf);
- memosd.Lines.Add('字符【' + char_str + '】');
- memosd.Lines.Add('读取补货记录' + inttostr(start_num) + '结束!');
- freemem(fbuf);
- closehandle(hdevicehandle);
- End;
- // do_sd(char_str , tmp_str);
- start_num := start_num + 1;
- End;
- // i := bi_bu_mixi_sd(tem_id);
- If i = 2 Then
- Begin
- // write_bu_from_tmp(tem_id);
- End;
- char_str := '';
- tmp_str := '';
- start_num := 301;
- del_trans_tmp(tem_id);
- write_trans_con_tmp(tem_id , inttostr(trans_count) , '');
- While start_num <= (trans_count * 3 + 300) Do
- Begin
- hdevicehandle := CreateFile(driver , GENERIC_ALL , FILE_SHARE_READ Or FILE_SHARE_WRITE , Nil , OPEN_EXISTING , 0 , 0);
- If (hdevicehandle <> INVALID_HANDLE_VALUE) Then
- Begin
- fbuf := allocmem(3 * block_size);
- FileSeek(hdevicehandle , start_num * block_size , 0);
- If FileRead(hdevicehandle , fbuf[0] , 3 * block_size) <> 3 * block_size Then
- Raise exception.Create('读磁盘错误!');
- char_str := strpas(fbuf);
- memosd.Lines.Add('字符【' + char_str + '】');
- memosd.Lines.Add('读取交易记录' + inttostr(start_num) + '结束!');
- freemem(fbuf);
- closehandle(hdevicehandle);
- End;
- do_sd(char_str , tmp_str);
- start_num := start_num + 3;
- End;
- i := bi_trans_mixi_sd(tem_id);
- If i = 2 Then
- Begin
- write_trans_from_tmp(tem_id);
- End;
- frmdatamu.Message1.Text := '读取SD卡结束!';
- frmdatamu.Message1.ShowModal;
- End;
- end.
http://blog.csdn.net/cmdasm/article/details/16949585
CreateFile FileSeek FileRead 直接读取数据的更多相关文章
- Delphi判断文件是否正在被使用(CreateFile也可以只是为了读取数据,而不是创建)
首先,我们先来认识下CreateFile函数,它的原型如下 HANDLE CreateFile( LPCTSTR lpFileName, //指向文件名的指针 DWORD dwDesired ...
- struts2中从后台读取数据到<s:select>
看到网上好多有struts2中从后台读取数据到<s:select>的,但都 不太详细,可能是我自己理解不了吧!所以我自己做了 一个,其中可能 有很多不好的地方,望广大网友指出 结果如图 p ...
- [MVC4]ASP.NET MVC4+EF5(Lambda/Linq)读取数据
继续上一节初始ASP.NET MVC4,继续深入学习,感受了一下微软的MVC4+EF5(EntityFramework5)框架的强大,能够高效的开发出网站应用开发系统,下面就看一下如何用MVC4+EF ...
- ubuntu server 12.04U盘安装,提示无法挂载安装光盘或光盘读取数据出错
今天用Ultraiso将Ubuntu server 12.04 刻入U盘中安装系统,中间提示错误:1.检测不到cdrom(即U盘没有挂载上):2.从光盘中读取数据出错.问题如下图所示: 上网搜了下解决 ...
- MySQL数据库中tinyint类型字段读取数据为true和false
今天遇到这么一个问题,公司最近在做一个活动,然后数据库需要建表,其中有个字段是关于奖励发放的状态的字段,结果读取出来的值为true 一.解决读取数据为true/false的问题 场景: 字段:stat ...
- My Game --文件读取数据
My Game --线段数据 中说到背景的绘制由贝赛尔曲线生成线段,用 DrawNode 画多边形,同时一张背景有两座山,一座山有两条以上贝赛尔曲线保存,用了嵌套的数据类:Bezier,LineLay ...
- Java—从文件中读取数据
1.FileInputStream() // 构建字节输入流对象,参数为文件名 FileInputStream fin = new FileInputStream("message" ...
- 10天学会phpWeChat——第三天:从数据库读取数据到视图
在第二天,我们创建了我们的第一个phpWeChat功能模块,但是比较简单.实际生产环境中,我们不可能有如此简单的需求.更多的情况是数据存储在MySql数据库中,我们开发功能模块的作用就是将这些数据从M ...
- 用EXCEL内嵌的Visual Basic for Application 编程,通过 UGSimple USB-GPIB 控制器来驱动仪器34401A,并从34401A读取数据
现在市场上有很多中USB-GPIB 控制器,或叫 USB 转GPIB链接线. 每种GPIB控制器都有它的 函数库(dll库).各种GPIB 控制器的价钱插别很大.这里以一种价钱较便宜的USB-GPIB ...
随机推荐
- 解决多线程下simpleDateFormat的安全问题
// 日期格式化 private static final ThreadLocal<SimpleDateFormat> GMT_FORMATERS = new ThreadLocal< ...
- android performClick使用
performClick 是使用代码主动去调用控件的点击事件(模拟人手去触摸控件) ----------------------------------------- boolean android. ...
- [转] Linux下查看用户列表
原文地址:http://xiaod.in/read.php?77 俺的centos vps上面不知道添加了多少个账户,今天想清理一下,但是以前还未查看过linux用户列表,google了一下,找到方便 ...
- [转] Web性能压力测试工具之ApacheBench(ab)详解
PS:网站性能压力测试是性能调优过程中必不可少的一环.只有让服务器处在高压情况下才能真正体现出各种设置所暴露的问题.Apache中有个自带的,名为ab的程序,可以对Apache或其它类型的服务器进行网 ...
- Ubuntu ssh的使用
1. 题外话:install teamviewer on Ubuntu. wget http://download.teamviewer.com/download/teamviewer_linux.d ...
- Android项目中如何用好构建神器Gradle?(转)
最近在忙团队并行开发的事情,主要是将各个团队的代码分库,一方面可以降低耦合,为后面模块插件化做铺垫,另一方面采用二进制编译,可以加快编译速度.分库遇到了一些问题,很多都要通过Gradle脚本解决,所以 ...
- Android 百度地图 SDK v3.0.0 (四) 引入离线地图功能
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37758097 一直觉得地图应用支持离线地图很重要啊,我等移动2G屌丝,流量不易, ...
- Vim的多窗口模式管理
Vim中的多窗口打开 vim中,默认的多窗口打开,是横向分割窗口. 进入vim编辑器以后,可以通过new命令,新建一个子窗口 :new “新建一个未命名窗口 :new name "新建一个 ...
- 配置HP LaserJet M1536dnf MFP打印机通过TCPIP共享多台计算机
HP LaserJet M1536dnf MFP打印机通过TCPIP共享多台计算机配置配置过程:1.确保网线插入到打印机后,点设置按钮,到网络配置中查看IP地址,确保与主机或者路由器的IP地址一致,设 ...
- div 固定宽高 水平垂直居中方法
div固定宽高,水平垂直居中,根据所用单位不同,分成两种情况,分别是"px"和"%"情况. 例:将三层div做出三个边框,要求水平垂直居中.效果如图 情况一(单 ...