C#调用winrar压缩文件夹
///<summary>///压缩文件///</summary>///<returns>返回压缩后的路径</returns>publicstringYaSuo(outbo...
/// <summary>
/// 压缩文件
/// </summary>
/// <returns>返回压缩后的路径</returns>
public string YaSuo(out bool bo, out TimeSpan times)
{
bo = false;
//压缩文件
System.Diagnostics.Process pro = new System.Diagnostics.Process();
pro.StartInfo.FileName = @"C:\Program Files\WinRAR\WinRAR.exe";//WinRAR所在路径
pro.StartInfo.Arguments = "a -as " + yasuoPathSave + " " + yasuoPath + " ";//dir是你的目录名
pro.Start();
times = pro.TotalProcessorTime;
bo = pro.WaitForExit(60000);//设定一分钟
if (!bo)
pro.Kill();
pro.Close();
pro.Dispose();
return rarurlPath;
}
参数解释:
yasuoPathSave :d:\a\a.rar
yasuoPath : d:\b\b.txt文件夹路径
提问:
能成功压缩 ,现在的问题是a.rar 的压缩包里包含b文件夹,可是我不想要b文件夹,只想a.rar只有b.txt文件。怎么解决?求大神赐教!!!还有本人新手,不太懂,这中的 pro.StartInfo.Arguments = "a -as " + yasuoPathSave + " " + yasuoPath + " "; "a-as"什么意思?求大神赐教!!! 展开
/// 压缩文件
/// </summary>
/// <returns>返回压缩后的路径</returns>
public string YaSuo(out bool bo, out TimeSpan times)
{
bo = false;
//压缩文件
System.Diagnostics.Process pro = new System.Diagnostics.Process();
pro.StartInfo.FileName = @"C:\Program Files\WinRAR\WinRAR.exe";//WinRAR所在路径
pro.StartInfo.Arguments = "a -as " + yasuoPathSave + " " + yasuoPath + " ";//dir是你的目录名
pro.Start();
times = pro.TotalProcessorTime;
bo = pro.WaitForExit(60000);//设定一分钟
if (!bo)
pro.Kill();
pro.Close();
pro.Dispose();
return rarurlPath;
}
参数解释:
yasuoPathSave :d:\a\a.rar
yasuoPath : d:\b\b.txt文件夹路径
提问:
能成功压缩 ,现在的问题是a.rar 的压缩包里包含b文件夹,可是我不想要b文件夹,只想a.rar只有b.txt文件。怎么解决?求大神赐教!!!还有本人新手,不太懂,这中的 pro.StartInfo.Arguments = "a -as " + yasuoPathSave + " " + yasuoPath + " "; "a-as"什么意思?求大神赐教!!! 展开
2个回答
2015-08-05 · 知道合伙人数码行家
关注
展开全部
要先引入using Microsoft.Win32;
/// <summary>
/// 压缩
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button1_Click(object sender, EventArgs e)
{
ArrayList arrFiles = new ArrayList();
//要打包两个文件和一个文件夹
arrFiles.Add(@"c:\abc.xls");
arrFiles.Add(@"d:\xyz.xls");
arrFiles.Add(@"e:\uvc");
//压缩文件存放路径
string savestr = @"c:\kugoo";
//压缩文件名
string name = "test.rar";
this.CompressFileForReportTable(arrFiles, savestr, name);
}
/// <summary>
/// 压缩文件
/// </summary>
/// <param name="sourceFilesPaths">要压缩的文件路径列表</param>
/// <param name="compressFileSavePath">压缩文件存放路径</param>
/// <param name="compressFileName">压缩文件名(全名)</param>
p lic void CompressFileForReportTable(ArrayList sourceFilesPaths, string compressFileSavePath, string compressFileName)
{
String the_rar;
RegistryKey the_Reg;
System.Object the_Obj;
String the_Info;
ProcessStartInfo the_StartInfo;
Process the_Process;
try
{
//使用注册表对象获取到WiNRar路径
the_Reg = Registry.ClassesRoot.OpenS Key(@"Applications\WinRAR.exe\Shell\Open\Command");
the_Obj = the_Reg.GetVal("");
the_rar = the_Obj.ToString();
the_Reg.Close();
the_rar = the_rar.S string(1, the_rar.Length - 7);
the_Info = " a " + compressFileName;
foreach (object filePath in sourceFilesPaths)
{
the_Info += " " + filePath.ToString();//每个文件路径要与其它的空格隔开
}
the_StartInfo = new ProcessStartInfo();
the_StartInfo.FileName = the_rar;
the_StartInfo.Arguments = the_Info;
the_StartInfo.WindowStyle = ProcessWindowStyle.Normal;//Hidden 隐藏样式
the_StartInfo.WorkingDirectory = compressFileSavePath;//获取或设置要启动的进程的初始目录。(RAR存放路径)
the_Process = new Process();
the_Process.StartInfo = the_StartInfo;
the_Process.Start();
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
/// <summary>
/// 解压缩指定的rar文件。
/// </summary>
/// <param name="rarFileToDecompress">rar文件(绝对路径)。</param>
/// <param name="directoryToSave">解压缩保存的目录。</param>
/// <param name="deleteRarFile">解压缩后删除rar文件。</param>
p lic void DecompressRAR(string rarFileToDecompress, string directoryToSave, bool deleteRarFile)
{
String the_rar;
RegistryKey the_Reg;
Object the_Obj;
the_Reg = Registry.ClassesRoot.OpenS Key(@"Applications\WinRAR.exe\Shell\Open\Command");
the_Obj = the_Reg.GetVal("");
the_rar = the_Obj.ToString();
the_Reg.Close();
the_rar = the_rar.S string(1, the_rar.Length - 7);
string winrarExe = the_rar;//需要在指定路径下放入winara.exe的可执行文件在安装目录下可以找到这个文件
if (new FileInfo(winrarExe).Exists)
{
//directoryToSave = CheckDirectoryName(directoryToSave);
try
{
Process p = new Process();
// 需要启动的程序名
p.StartInfo.FileName = winrarExe;
// 参数
string arguments = @"x -inul -y -o+";
arguments += " " + rarFileToDecompress + " " + directoryToSave;
p.StartInfo.Arguments = arguments;
p.Start();//启动
while (!p.HasExited)
{
}
p.WaitForExit();
}
catch (Exception ee)
{
throw new Exception("压缩文件在解压缩的过程中出现了错误!");
}
if (deleteRarFile)
{
File.Delete(rarFileToDecompress);
}
}
else
{
throw new Exception("本机上缺少必须的Winrar.exe文件,不能完成相应操作请联系管理员安装WinRar解压工具!");
/// <summary>
/// 压缩
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button1_Click(object sender, EventArgs e)
{
ArrayList arrFiles = new ArrayList();
//要打包两个文件和一个文件夹
arrFiles.Add(@"c:\abc.xls");
arrFiles.Add(@"d:\xyz.xls");
arrFiles.Add(@"e:\uvc");
//压缩文件存放路径
string savestr = @"c:\kugoo";
//压缩文件名
string name = "test.rar";
this.CompressFileForReportTable(arrFiles, savestr, name);
}
/// <summary>
/// 压缩文件
/// </summary>
/// <param name="sourceFilesPaths">要压缩的文件路径列表</param>
/// <param name="compressFileSavePath">压缩文件存放路径</param>
/// <param name="compressFileName">压缩文件名(全名)</param>
p lic void CompressFileForReportTable(ArrayList sourceFilesPaths, string compressFileSavePath, string compressFileName)
{
String the_rar;
RegistryKey the_Reg;
System.Object the_Obj;
String the_Info;
ProcessStartInfo the_StartInfo;
Process the_Process;
try
{
//使用注册表对象获取到WiNRar路径
the_Reg = Registry.ClassesRoot.OpenS Key(@"Applications\WinRAR.exe\Shell\Open\Command");
the_Obj = the_Reg.GetVal("");
the_rar = the_Obj.ToString();
the_Reg.Close();
the_rar = the_rar.S string(1, the_rar.Length - 7);
the_Info = " a " + compressFileName;
foreach (object filePath in sourceFilesPaths)
{
the_Info += " " + filePath.ToString();//每个文件路径要与其它的空格隔开
}
the_StartInfo = new ProcessStartInfo();
the_StartInfo.FileName = the_rar;
the_StartInfo.Arguments = the_Info;
the_StartInfo.WindowStyle = ProcessWindowStyle.Normal;//Hidden 隐藏样式
the_StartInfo.WorkingDirectory = compressFileSavePath;//获取或设置要启动的进程的初始目录。(RAR存放路径)
the_Process = new Process();
the_Process.StartInfo = the_StartInfo;
the_Process.Start();
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
/// <summary>
/// 解压缩指定的rar文件。
/// </summary>
/// <param name="rarFileToDecompress">rar文件(绝对路径)。</param>
/// <param name="directoryToSave">解压缩保存的目录。</param>
/// <param name="deleteRarFile">解压缩后删除rar文件。</param>
p lic void DecompressRAR(string rarFileToDecompress, string directoryToSave, bool deleteRarFile)
{
String the_rar;
RegistryKey the_Reg;
Object the_Obj;
the_Reg = Registry.ClassesRoot.OpenS Key(@"Applications\WinRAR.exe\Shell\Open\Command");
the_Obj = the_Reg.GetVal("");
the_rar = the_Obj.ToString();
the_Reg.Close();
the_rar = the_rar.S string(1, the_rar.Length - 7);
string winrarExe = the_rar;//需要在指定路径下放入winara.exe的可执行文件在安装目录下可以找到这个文件
if (new FileInfo(winrarExe).Exists)
{
//directoryToSave = CheckDirectoryName(directoryToSave);
try
{
Process p = new Process();
// 需要启动的程序名
p.StartInfo.FileName = winrarExe;
// 参数
string arguments = @"x -inul -y -o+";
arguments += " " + rarFileToDecompress + " " + directoryToSave;
p.StartInfo.Arguments = arguments;
p.Start();//启动
while (!p.HasExited)
{
}
p.WaitForExit();
}
catch (Exception ee)
{
throw new Exception("压缩文件在解压缩的过程中出现了错误!");
}
if (deleteRarFile)
{
File.Delete(rarFileToDecompress);
}
}
else
{
throw new Exception("本机上缺少必须的Winrar.exe文件,不能完成相应操作请联系管理员安装WinRar解压工具!");
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
"a -as"是压缩命令参数,这中间其实包含了2个命令参数
a:添加指定的文件和文件夹到压缩文件中
-as:同步压缩文件内容
如果此开关使用于压缩时,在当前添加的文件列表中不存在的被压缩文件,将会从压缩文件中删除。它可以很方便的与 -u 开关结合,用来同步压缩文件和压缩的文件夹的内容。
举例来说,在下面命令之后:
WinRAR a -u -as backup sources\*.cpp
压缩文件 backup.rar 将只会包含源文件夹的 *.cpp
文件,其它的全部文件将会从压缩文件中删除。它看起来就好象创建新压缩文件,但有一个重要的不同 :
如果从上次备份后没有修改过的文件,这项操作会比创建新压缩文件的操作快上许多。
另外,压缩时不包含路径则添加命令参数"-ep",
-ep:包含此开关时,文件在加入压缩文件时不会包含路径信息。这可能会有在压缩文件中,存在数个相同名称的结果。
例子:
从当前磁盘压缩全部的 *.bas 文件而不含路径。
WinRAR a -r -ep bsources \*.bas
以上参数说明均摘自winrar自带的说明文档,如果你需要其他功能,可以自行查看.
a:添加指定的文件和文件夹到压缩文件中
-as:同步压缩文件内容
如果此开关使用于压缩时,在当前添加的文件列表中不存在的被压缩文件,将会从压缩文件中删除。它可以很方便的与 -u 开关结合,用来同步压缩文件和压缩的文件夹的内容。
举例来说,在下面命令之后:
WinRAR a -u -as backup sources\*.cpp
压缩文件 backup.rar 将只会包含源文件夹的 *.cpp
文件,其它的全部文件将会从压缩文件中删除。它看起来就好象创建新压缩文件,但有一个重要的不同 :
如果从上次备份后没有修改过的文件,这项操作会比创建新压缩文件的操作快上许多。
另外,压缩时不包含路径则添加命令参数"-ep",
-ep:包含此开关时,文件在加入压缩文件时不会包含路径信息。这可能会有在压缩文件中,存在数个相同名称的结果。
例子:
从当前磁盘压缩全部的 *.bas 文件而不含路径。
WinRAR a -r -ep bsources \*.bas
以上参数说明均摘自winrar自带的说明文档,如果你需要其他功能,可以自行查看.
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询