⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unit1.pas

📁 delphi写的拷贝指定起始扇区开始的一定扇区数的代码
💻 PAS
字号:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    SD: TSaveDialog;
    Button1: TButton;
    Bevel1: TBevel;
    Panel1: TPanel;
    Label1: TLabel;
    Label2: TLabel;
    start: TEdit;
    size: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
  function ExtFileSeek(Handle: Integer; const Offset: Int64; Origin: Integer): Int64;
var
  Form1: TForm1;

implementation

{$R *.dfm}
function ExtFileSeek(Handle: Integer; const Offset: Int64; Origin: Integer):Int64;
begin
  Result := Offset;
  Int64Rec(Result).Lo := SetFilePointer(THandle(Handle), Int64Rec(Result).Lo,
    @Int64Rec(Result).Hi, Origin);
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  ExitProcess(0);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Buf: array[0..511]  of Byte;     //数据缓冲区
  ShowText, TmpStr: string;
  StarSector:integer;
  FileHandle: THandle;
  i: Cardinal;
  Fsize:integer;
  Curr,pos,Compare: Int64;
  FileStream:Tfilestream;
begin
  if (start.Text='') or (size.Text='') then
  begin
    showmessage('起始和文件大小不能为空!');
    ExitProcess(0);
  end else
  begin
    StarSector:=strtoint(trim(start.text));
    Fsize:=strtoint(trim(size.text));
    FileHandle := CreateFile('\\.\Physicaldrive0', GENERIC_READ, FILE_SHARE_READ or FILE_SHARE_WRITE,
      nil, OPEN_EXISTING, 0, 0);
    if FileHandle = INVALID_HANDLE_VALUE then
    begin
      MessageBox(GetDesktopWindow, '打开磁盘失败', 'ERROR', MB_OK);
      ExitProcess(0);
    end;
      pos:=int64(StarSector);
      Curr:=Int64(pos*512);
      if SD.Execute then
      begin
        FileStream:=TFileStream.Create(SD.FileName,fmCreate);
      end else
        Exit;  //如果点取消则退出操作
      Compare:=(Curr+FSize);
      while Curr<=Compare do
      begin
        Curr:=ExtFileSeek(FileHandle,Curr,0);
        FileRead(FileHandle,buf,sizeof(buf));
        FileStream.Write(Buf,Sizeof(Buf));
        Curr:=Curr+512;
      end;
          FileStream.Free;
          Application.MessageBox('保存文件成功!','系统提示',MB_OK);
  end;
end;
end.
        

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -