- 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