1. unit Unit1;
  2. interface
  3. uses
  4. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  5. Dialogs, StdCtrls, FileCtrl;
  6. type
  7. TForm1 = class(TForm)
  8. Button1: TButton;
  9. DriveComboBox1: TDriveComboBox;
  10. memosd: TMemo;
  11. procedure Button1Click(Sender: TObject);
  12. private
  13. { Private declarations }
  14. public
  15. { Public declarations }
  16. end;
  17. var
  18. Form1: TForm1;
  19. implementation
  20. {$R *.dfm}
  21. procedure TForm1.Button1Click(Sender: TObject);
  22. Var
  23. driver          : pchar;
  24. block_size      : Integer;
  25. start_num , total_num , num_tmp : Integer;
  26. hdevicehandle   : thandle;
  27. i , j , k       : Integer;
  28. C               : Char;
  29. fbuf            : pchar;
  30. hex_str , char_str , tmp_str : String;
  31. tem_id          : String;
  32. trans_no_tmp    : String;
  33. num             : String;
  34. bu_count , trans_count : Integer;
  35. Begin
  36. driver := pchar('\\.\' + DriveComboBox1.Drive + ':');
  37. block_size := 512;
  38. start_num := 0;
  39. total_num := 1;
  40. hdevicehandle := CreateFile(driver , GENERIC_ALL , FILE_SHARE_READ Or FILE_SHARE_WRITE , Nil , OPEN_EXISTING , 0 , 0);
  41. If (hdevicehandle <> INVALID_HANDLE_VALUE) Then
  42. Begin
  43. fbuf := allocmem(total_num * block_size);
  44. FileSeek(hdevicehandle , start_num * block_size , 0);
  45. If FileRead(hdevicehandle , fbuf[0] , total_num * block_size) <> total_num * block_size Then
  46. Raise exception.Create('读磁盘错误!');
  47. char_str := strpas(fbuf);
  48. memosd.Lines.Add('字符【' + char_str + '】');
  49. memosd.Lines.Add('读取包头结束!');
  50. freemem(fbuf);
  51. closehandle(hdevicehandle);
  52. End;
  53. tmp_str := copy(char_str , 1 , 10);
  54. If trystrtoint(tmp_str , bu_count) = false Then
  55. Begin
  56. memosd.Lines.Add('补货记录总条数不是合法的整数!');
  57. exit;
  58. End;
  59. tmp_str := '';
  60. tmp_str := copy(char_str , 11 , 10);
  61. If trystrtoint(tmp_str , trans_count) = false Then
  62. Begin
  63. memosd.Lines.Add('交易记录总条数不是合法的整数!');
  64. exit;
  65. End;
  66. tem_id := copy(char_str , 21 , 8);
  67. // del_bu_tmp(tem_id);
  68. //write_bu_con_tmp(tem_id , inttostr(bu_count) , '');
  69. start_num := 1;
  70. While start_num <= bu_count Do
  71. Begin
  72. hdevicehandle := CreateFile(driver , GENERIC_ALL , FILE_SHARE_READ Or FILE_SHARE_WRITE , Nil , OPEN_EXISTING , 0 , 0);
  73. If (hdevicehandle <> INVALID_HANDLE_VALUE) Then
  74. Begin
  75. fbuf := allocmem(block_size);
  76. FileSeek(hdevicehandle , start_num * block_size , 0);
  77. If FileRead(hdevicehandle , fbuf[0] , block_size) <> block_size Then
  78. Raise exception.Create('读磁盘错误!');
  79. char_str := strpas(fbuf);
  80. memosd.Lines.Add('字符【' + char_str + '】');
  81. memosd.Lines.Add('读取补货记录' + inttostr(start_num) + '结束!');
  82. freemem(fbuf);
  83. closehandle(hdevicehandle);
  84. End;
  85. //     do_sd(char_str , tmp_str);
  86. start_num := start_num + 1;
  87. End;
  88. // i := bi_bu_mixi_sd(tem_id);
  89. If i = 2 Then
  90. Begin
  91. //         write_bu_from_tmp(tem_id);
  92. End;
  93. char_str := '';
  94. tmp_str := '';
  95. start_num := 301;
  96. del_trans_tmp(tem_id);
  97. write_trans_con_tmp(tem_id , inttostr(trans_count) , '');
  98. While start_num <= (trans_count * 3 + 300) Do
  99. Begin
  100. hdevicehandle := CreateFile(driver , GENERIC_ALL , FILE_SHARE_READ Or FILE_SHARE_WRITE , Nil , OPEN_EXISTING , 0 , 0);
  101. If (hdevicehandle <> INVALID_HANDLE_VALUE) Then
  102. Begin
  103. fbuf := allocmem(3 * block_size);
  104. FileSeek(hdevicehandle , start_num * block_size , 0);
  105. If FileRead(hdevicehandle , fbuf[0] , 3 * block_size) <> 3 * block_size Then
  106. Raise exception.Create('读磁盘错误!');
  107. char_str := strpas(fbuf);
  108. memosd.Lines.Add('字符【' + char_str + '】');
  109. memosd.Lines.Add('读取交易记录' + inttostr(start_num) + '结束!');
  110. freemem(fbuf);
  111. closehandle(hdevicehandle);
  112. End;
  113. do_sd(char_str , tmp_str);
  114. start_num := start_num + 3;
  115. End;
  116. i := bi_trans_mixi_sd(tem_id);
  117. If i = 2 Then
  118. Begin
  119. write_trans_from_tmp(tem_id);
  120. End;
  121. frmdatamu.Message1.Text := '读取SD卡结束!';
  122. frmdatamu.Message1.ShowModal;
  123. End;
  124. end.

http://blog.csdn.net/cmdasm/article/details/16949585

CreateFile FileSeek FileRead 直接读取数据的更多相关文章

  1. Delphi判断文件是否正在被使用(CreateFile也可以只是为了读取数据,而不是创建)

    首先,我们先来认识下CreateFile函数,它的原型如下   HANDLE CreateFile( LPCTSTR lpFileName,    //指向文件名的指针 DWORD dwDesired ...

  2. struts2中从后台读取数据到<s:select>

    看到网上好多有struts2中从后台读取数据到<s:select>的,但都 不太详细,可能是我自己理解不了吧!所以我自己做了 一个,其中可能 有很多不好的地方,望广大网友指出 结果如图 p ...

  3. [MVC4]ASP.NET MVC4+EF5(Lambda/Linq)读取数据

    继续上一节初始ASP.NET MVC4,继续深入学习,感受了一下微软的MVC4+EF5(EntityFramework5)框架的强大,能够高效的开发出网站应用开发系统,下面就看一下如何用MVC4+EF ...

  4. ubuntu server 12.04U盘安装,提示无法挂载安装光盘或光盘读取数据出错

    今天用Ultraiso将Ubuntu server 12.04 刻入U盘中安装系统,中间提示错误:1.检测不到cdrom(即U盘没有挂载上):2.从光盘中读取数据出错.问题如下图所示: 上网搜了下解决 ...

  5. MySQL数据库中tinyint类型字段读取数据为true和false

    今天遇到这么一个问题,公司最近在做一个活动,然后数据库需要建表,其中有个字段是关于奖励发放的状态的字段,结果读取出来的值为true 一.解决读取数据为true/false的问题 场景: 字段:stat ...

  6. My Game --文件读取数据

    My Game --线段数据 中说到背景的绘制由贝赛尔曲线生成线段,用 DrawNode 画多边形,同时一张背景有两座山,一座山有两条以上贝赛尔曲线保存,用了嵌套的数据类:Bezier,LineLay ...

  7. Java—从文件中读取数据

    1.FileInputStream() // 构建字节输入流对象,参数为文件名 FileInputStream fin = new FileInputStream("message" ...

  8. 10天学会phpWeChat——第三天:从数据库读取数据到视图

    在第二天,我们创建了我们的第一个phpWeChat功能模块,但是比较简单.实际生产环境中,我们不可能有如此简单的需求.更多的情况是数据存储在MySql数据库中,我们开发功能模块的作用就是将这些数据从M ...

  9. 用EXCEL内嵌的Visual Basic for Application 编程,通过 UGSimple USB-GPIB 控制器来驱动仪器34401A,并从34401A读取数据

    现在市场上有很多中USB-GPIB 控制器,或叫 USB 转GPIB链接线. 每种GPIB控制器都有它的 函数库(dll库).各种GPIB 控制器的价钱插别很大.这里以一种价钱较便宜的USB-GPIB ...

随机推荐

  1. .NET框架设计—常被忽视的框架设计技巧

    阅读目录: 1.开篇介绍 2.元数据缓存池模式(在运行时构造元数据缓存池) 2.1.元数据设计模式(抽象出对数据的描述数据) 2.2.借助Dynamic来改变IOC.AOP动态绑定的问题 2.3.元数 ...

  2. Data Guard 之 浅析Switchover与Failover

    Data Guard主从库之间的角色切换分为以下两种:1)SwitchoverSwithchover通常都是人为的有计划的进行角色互换,比如升级等.它通常都是无损的,即不会有数据丢失.其执行主要分为两 ...

  3. shell介绍

    shell介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一:学好shell的3个基本条件: 1.vi/vim编辑器的熟练使用,ssh终端及".vimrc" ...

  4. SKKeyframeSequence类

    继承自 NSObject 符合 NSCodingNSCopyingNSObject 框架  /System/Library/Frameworks/SpriteKit.framework 可用性 可用于 ...

  5. huffman编码——原理与实现

    哈夫曼算法原理 Wikipedia上面说的非常清楚了,这里我就不再赘述,直接贴过来了. 1952年, David A. Huffman提出了一个不同的算法,这个算法能够为不论什么的可能性提供出一个理想 ...

  6. VS2010 使用TeeChart画图控件 - 之二 - 绘制图形(折线图,柱状图)

    1.前期准备 详细可见VS2010 使用TeeChart画图控件 - 之中的一个 控件和类的导入 1. 1 加入TeeChart控件,给控件加入变量m_TeeChart 加入TeeChart控件,右击 ...

  7. OleDb 读取 excel

    //定义变量 _Application ExcelApp; Workbooks wbsMyBooks; _Workbook wbMyBook; Worksheets wssMysheets; _Wor ...

  8. Android事件的分发机制

    在分析Android事件分发机制前,明确android的两大基础控件类型:View和ViewGroup.View即普通的控件,没有子布局的,如Button.TextView. ViewGroup继承自 ...

  9. iscc2016 pwn部分writeup

    一.pwn1 简单的32位栈溢出,定位溢出点后即可写exp gdb-peda$ r Starting program: /usr/iscc/pwn1 C'mon pwn me : AAA%AAsAAB ...

  10. /dev/null 文件

    /dev/null 文件 如果希望执行某个命令,但又不希望在屏幕上显示输出结果,那么可以将输出重定向到 /dev/null: $ command > /dev/null /dev/null 是一 ...