由于业务需要最近写了个小程序,拿来分享:
先说背景,我呼叫中心系统管理,每周会导出一批录音文件给客户质检。录音是直接从服务器下载拷贝的,一批录音有上千条,而且原始导出的录音有点 ‘二’无法让人摸清来龙去脉。导出来是这样
解压后是这样的,每个录音有一个XML的解释说明文件,文件名和录音文件名一样。这些文件名感觉上是用时间戳堆出来的。
XML的解释说明文件里有callID,来电号码,来电时间等N多信息。客户要求将所有的录音文件压缩一个包,且文件名用来电号码+时间命名,这样方便查看。
背景需求完毕。
分析解决方案:首先tar是Linux下的压缩包,需要解压,而且是批量处理,然后读取xml的文档信息,将来电号码和来电时间提取出来组成新的文件名,然后将原录音文件重新命名,也是批量处理。
分析完毕。
一开始想用Python(最近在学习的,还不熟)解决,放弃;用C++也是二把刀,怕赶不上时间;最后还是用了C#做个简单的小程序吧,毕竟还是熟悉的快一些。
从网上下载了DLL文件‘SharpZipLib.dll’,这里面包含了zip,rar,tar等压缩和解压缩的很多东东,感谢提供这个东东的。
这里的代码网上有很多,随便搜搜可以看到~~~~
解读XML文件的信息,C#的system.xml是很好的东东。
public static recordingInfo GetRecordingInfo(string xmlFileName)
{
recordingInfo rdInfo=new recordingInfo();
string content = string.Empty;
XmlDocument xmlDoc = new XmlDocument();
try
{
xmlDoc.Load(xmlFileName); //加载XML文档
XmlNode node = xmlDoc.ChildNodes[1];
//来电时间
rdInfo.STime = node.Attributes["starttime"].Value.Substring(0, 19);
//录音文件名
rdInfo.OldName = node.Attributes["filename"].Value;
//来电号码
rdInfo.ANI = node.ChildNodes[0].ChildNodes[3].ChildNodes[7].InnerText;
}
catch (Exception ex)
{
throw ex; //这里可以定义你自己的异常处理
}
return rdInfo;
}
recordingInfo是我对录音文件的一个类:
public class recordingInfo
{
public string OldName { get; set; }
public string ANI { get; set; }
public string STime { get; set; }
}
然后就是文件重名命后和删除原文件了,先来删除文件的,这个简单:
public bool DeleteFiles(string fileName)
{
if (File.Exists(fileName))
{
File.Delete(fileName);
return true;
}
return false;
}
文件重名命,第一次使用才知道C#的File类没有rename这个方法,简直哭死人啦。网络就是个神奇的东西,你不需要记住,只要会检索,总会在某个地方有你需要的:引用这两个
using Microsoft.VisualBasic;
using Microsoft.VisualBasic.Devices;
下面两句话解决重命名,哈哈哈,你就笑吧,突然想你昨天看到的一句话,“程序员为什么喜欢写代码,因为那是在创造一个生命,给他赋予程序智能~”
Computer MyComputer = new Computer();
MyComputer.FileSystem.RenameFile(FileName, newName);
几个关键点都解决了,剩下的只需要组织代码,将整个逻辑整理得当就OK啦。
整体界面图:
解压后的文件是这样的
完毕,测试几遍可以使用。
本文出自 “学习日记” 博客,请务必保留此出处http://wuqiang265.blog.51cto.com/4718310/1789418
C#技术积累(解压tar文件,解析xml,重命名文件,删除文件)
原文地址:http://wuqiang265.blog.51cto.com/4718310/1789418