• ISO文件生成工具 ISOMaker


    上次写了个CD/DVD -> ISO 的工具,不过似乎有点小问题
    正好看见博客园有位老兄也写了个类似的工具,所以模仿了他的界面重写了一个

    download.gif
    点击下载


    2008-01-14
    [*] 修正了时间显示部分
    [*] 修正了版本显示部分
    [*] 提高了数据写入速度
    [+] 增加了写入速率显示
    [+] 加入在线版本检查功能


    2007-4-25

    [*] 修改版本号为1.0,并使用"主.年.月.日"格式
    [+] 添加刷新按钮,用来刷新驱动器列表
    [+] 用不同的图标区分DVD和CD,且有光盘和无光盘时也不同

    TODO:
       某些系统下不会自动刷新驱动器列表





    核心代码
    procedure TISOMaker.Build(Drive: Char; FileName: string; BufferSize: DWORD);
    var
      hDrive, hFile: THandle;
      Buffer: array of Byte;
      Readed: Cardinal;
      Count,
      Total: Int64;
    begin
      hFile := CreateFile(PChar(FileName), GENERIC_WRITE, FILE_SHARE_READ, nil, CREATE_ALWAYS, 0, 0);
      if hFile = INVALID_HANDLE_VALUE then
        raise Exception.CreateFmt('创建文件 %s: 失败', [FileName]);

       hDrive := CreateFile(PChar('\\.\' + Drive + ':'), GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, 0, 0);
      if hDrive = INVALID_HANDLE_VALUE then
      begin
        CloseHandle(hFile);
        raise Exception.CreateFmt('打开驱动器 %s: 失败', [Drive]);
      end;

      FDrive := Drive;
      FAborted := False;
      try
        Count := 0;
        Total := GetDriveSize(Drive);
        GetMem(Buffer, BufferSize);

        while not FAborted and ReadFile(hDrive, Buffer[0], BufferSize, Readed, nil) and (Readed > 0) do
        begin
          Inc(Count, Readed);
          DoProgress(Count, Total);
          WriteFile(hFile, Buffer[0], Readed, Readed, nil);
        end;
      finally
        CloseHandle(hFile);
        CloseHandle(hDrive);
        FreeMem(Buffer, BufferSize);

        DoProgress(0, 0);
        FDrive := #0;
      end;
    end;

  • 相关阅读:
    集成TBS(腾讯浏览服务)x5内核的webView
    android studio 华为手机看不到具体的错误日志
    android混淆那些事
    通用工具
    用队列来处理订单以及集合间性能比较
    从.Net版本演变看String和StringBuilder性能之争
    从事件来看委托
    从矢量来看运算符重载
    从foreach语句枚举元素看数组
    从装箱拆箱看泛型
  • 原文地址:https://www.cnblogs.com/sephil/p/ISOMaker_Update.html
Copyright © 2020-2023  润新知