lazarus开发:生成压缩包以及中文的处理

试了几个包,都不太理想,主要就是只能压缩非中文文件名的文件。最后发现用 unit Zipper 基本可以用,只是压缩后,用360压缩打开这个压缩包,中文文件名都是乱码,但是用自己写的解压缩程序是可以的。

uses
   zipper, 

......


procedure TForm_Import.bak1Qiye(sOutDir, sOutZipName: string);
var
  sFullPathName, sPartPathName, zipfilename: string;
  zip: TZipper;
  fileList: TStringList;
begin
  SetMultiByteConversionCodePage(CP_UTF8);

  Cursor := crHourGlass;
  zipfilename := sOutDir + '\' + sOutZipName + '.zip';

  zip := TZipper.Create;
  zip.Filename := zipfilename;

  fileList := TStringList.Create;

  fileList := FindAllFiles(sPathCurProj, '*.*', true);
  for sFullPathName in fileList do
  begin
    sPartPathName := stringReplace(sFullPathName, ExtractFilePath(ParamStr(0)), '', [rfIgnoreCase]);

    zip.Entries.AddFileEntry(sPartPathName);
  end;

  zip.SaveToFile(zipfilename);
  zip.Free;
  Cursor := crDefault;

  fileList.Free;

end;  

解压缩

var
  unzipper: TUnzipper;
  fnToImport, sArchivePathFn, strXingyongCodeInArchive: string;

begin

  if OpenDialog1.Execute then
  begin
    fnToImport := OpenDialog1.FileName;

    unzipper := TUnzipper.Create;
    unzipper.Filename := fnToImport;
    unzipper.OutputPath := ExtractFilePath(ParamStr(0));
    unzipper.Examine;

    // 检查data文件夹种是否已经存在重复信用代码
    sArchivePathFn := unzipper.Entries[0].ArchiveFileName;
    sArchivePathFn := stringReplace(sArchivePathFn, 'data/', '', []);

    strXingyongCodeInArchive := copy(sArchivePathFn, 0, pos('/', sArchivePathFn) - 1);
    memo1.append('信用代码:' + strXingyongCodeInArchive);

    if not DirectoryExists(sPathMain + 'data\' + strXingyongCodeInArchive) then
    begin

      unzipper.UnzipAllFiles;
      memo1.append('导入完成:' + fnToImport);

    end
    else
    begin
      memo1.append('已存在该企业。企业信用代码:' + strXingyongCodeInArchive + ' 企业名称: ' + sCurQiyeName);
      if MessageDlg('系统提示','已存在该企业。企业信用代码:' + strXingyongCodeInArchive + ' 企业名称: ' + sCurQiyeName + '。需要打开该企业文件夹吗?',mtInformation,[mbOk,mbCancel],0)=mrOk then
      begin
        OpenDocument(sPathMain + 'data\' + strXingyongCodeInArchive);
      end;
    end;

    unzipper.Free;
  end;  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值