C#调用动态unlha32.dll解压Lha后缀的打包文件分享_asp.net教程-查字典教程网
C#调用动态unlha32.dll解压Lha后缀的打包文件分享
C#调用动态unlha32.dll解压Lha后缀的打包文件分享
发布时间:2016-12-29 来源:查字典编辑
摘要:复制代码代码如下:publicclassLhaUtity{///取得DLL的版本[DllImport("unlha32")]privates...

复制代码 代码如下:

public class LhaUtity

{

///取得DLL的版本

[DllImport("unlha32")]

private static extern UInt16 UnlhaGetVersion();

/// <summary>

/// '取得DLL的执行情况

/// </summary>

/// <returns>是否成功</returns>

[DllImport("unlha32")]

private static extern Boolean UnlhaGetRunning();

/// <summary>

/// '文件检查

/// </summary>

/// <param name="szFileName"></param>

/// <param name="iMode"></param>

/// <returns></returns>

[DllImport("unlha32")]

private static extern Boolean UnlhaCheckArchive(String szFileName, Int32 iMode);

/// <summary>

/// 文件解压缩

/// </summary>

/// <param name="hwnd"></param>

/// <param name="szCmdLine"></param>

/// <param name="szOutput"></param>

/// <param name="dwSize"></param>

/// <returns></returns>

[DllImport("unlha32")]

private static extern int Unlha(int hwnd, string szCmdLine, string szOutput, int dwSize);

/// <summary>

/// 需要解压的文件

/// </summary>

/// <param name="archiveFile">解压文件路径</param>

/// <param name="extractDir">解压到路径</param>

/// <param name="isDeleteFile">是否删除</param>

public static bool UnCompress(string archiveFile, string extractDir,bool isDeleteFile)

{

string extractFullPath = string.Empty;

string startPath = AppDomain.CurrentDomain.BaseDirectory;

if (!System.IO.File.Exists(archiveFile))

{

//判断需要解压的文件存不存

throw new Exception(string.Format("需要解压的{0}不存在", archiveFile));

}

try

{

UInt16 ver = LhaUtity.UnlhaGetVersion();

}

catch (Exception ex)

{

throw new Exception("没找到Unlha32.dll文件");

}

if (UnlhaGetRunning())

{

throw new Exception("DLL正在执行");

}

if (!UnlhaCheckArchive(archiveFile, 0))

{

throw new Exception("文件不能被解压缩");

}

//解压的路径

if (string.IsNullOrEmpty(extractDir))

{

extractFullPath =string.Format(@"{0}{1}", startPath,archiveFile.Substring(archiveFile.LastIndexOf("")+1,archiveFile.IndexOf(".lha")-1-archiveFile.LastIndexOf("")));

}

else

{

extractFullPath = extractDir;

}

if (!System.IO.Directory.Exists(extractFullPath))

{

System.IO.Directory.CreateDirectory(extractFullPath);

}

int ret = Unlha(0, string.Format("x "{0}" "{1}"", archiveFile, extractFullPath), null, 0);

if (ret != 0)

{

if (ret == 32800)

{

throw new Exception("文件解压缩取消");

}

else

{

throw new Exception("文件解压缩异常结束");

}

}

else

{

if (isDeleteFile)

{

System.IO.File.Delete(archiveFile);

}

return true;

}

}

}

项目中需要到解压这类型的文件,无从下手,上网看资料发现是日本常用的压缩算法之一,

查了很多资料,都没有好的办法解包,

后来找到这个dll可以解包的

但是网上的代码都是VB或者C的

唯有自己写成C#版本的,其实即使C#调用动态链接库

先到网上下载这个dll,然后把这个DLL放到C:WindowsSystem32目录下

相关阅读
推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  • 最新asp.net教程学习
    热门asp.net教程学习
    编程开发子分类