zoukankan      html  css  js  c++  java
  • 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;

  • 相关阅读:
    10.9 第七次作业游戏
    10.23 第六次作业 刘惠惠 this关键字
    第五次作业 刘惠惠 自动生成的方法存根
    谷歌历史影像下载
    ArcGIS 基础13-整饰输出
    ArcGIS 基础12-保存文件并打包
    ArcGIS 基础11-专题制图
    ArcGIS 基础10-拓扑校验
    ArcGIS 基础9-属性查询和空间查询
    ArcGIS 基础8-坐标系转换
  • 原文地址:https://www.cnblogs.com/sephil/p/ISOMaker_Update.html
Copyright © 2011-2022 走看看