[html] ​​view plain​​ ​​copy​

 


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