这两天用c#做了一个数据处理的小程序,现在对这个程序以及程序中出现的问题做一个简单的总结。
程序描述:该程序主要功能是,对压缩文件进行解压,随后对解压后的文件进行分析,将特定格式的数据取出放在特定的文件夹中。
思路:首先将程序进行分析,把需要用到的功能单独拿出来进行操作(c#刚自学没多久,对很多功能都不熟悉);
窗体界面:
功能介绍:
1、首先是点击“预览”键选择需要解压的文件,并将文件在textBox里面显示出来,使用的是OpenFileDialog类,code如下:
OpenFileDialog ofl = new OpenFileDialog();
if (ofl.ShowDialog ()==DialogResult .OK ){
textBox1.Text = ofl.FileName;
}
2、对选中的文件首先进行复制,使用的是FileInfo类,code如下:
FileInfo f = new FileInfo(textBox1.Text);
//获取路径下的文件名
string text = Path.GetFileName(textBox1.Text);
//进行复制并对同名文件进行覆盖。
f.CopyTo(@"D:\资源\copy\" + text, true);
3、对文件进行解压。c#主要是调用类库。根据不同的文件格式选择不同的类库。这里写几个这几天我了解的。
对.zip文件的解压(开源):
1)、微软在System.IO.Compression命名空间有一些关于文件解压缩的类,如果只是希望压缩解压zip和gzip格式的文件,是个不错的选择,在NET Framework 4.5框架中,原生System.IO.Compression.FileSystem.dll程序集中新增了一个名为ZipFile的类,ZipFile的使用示例如下:
System.IO.Compression.ZipFile.CreateFromDirectory(@"e:\test", @"e:\test\test.zip"); //压缩
System.IO.Compression.ZipFile.ExtractToDirectory(@"e:\test\test.zip", @"e:\test"); //解压
2)、SharpZipLib是一个很不错的C#库,它能够解压缩zip、gzip和tar格式的文件(我在使用是发现他对7-zip压缩文件进行解压是会报错),首先下载 SharpZipLib解压后,在您的项目中引用ICSharpCode.SharpZLib.dll程序集即可,示例代码如下:
ZipOutputStream zipOutStream = new ZipOutputStream(File.Create("my.zip")); CreateFileZipEntry(zipOutStream, "file1.txt", "file1.txt"); CreateFileZipEntry(zipOutStream, @"folder1\folder2\folder3\file2.txt", "file2.txt"); zipOutStream.Close();
Directory.CreateDirectory("ZipOutPut"); ZipInputStream zipInputStream = new ZipInputStream(File.Open("my.zip", FileMode.Open)); ZipEntry zipEntryFromZippedFile = zipInputStream.GetNextEntry(); while (zipEntryFromZippedFile != null) { if (zipEntryFromZippedFile.IsFile) { FileInfo fInfo = new FileInfo(string.Format("ZipOutPut\\{0}", zipEntryFromZippedFile.Name)); if (!fInfo.Directory.Exists) fInfo.Directory.Create(); FileStream file = fInfo.Create(); byte[] bufferFromZip = new byte[zipInputStream.Length]; zipInputStream.Read(bufferFromZip, 0, bufferFromZip.Length); file.Write(bufferFromZip, 0, bufferFromZip.Length); file.Close(); } zipEntryFromZippedFile = zipInputStream.GetNextEntry(); } zipInputStream.Close();
3)、SharpCompress的C#框架被开源,它支持:rar 7zip, zip, tar, tzip和bzip2格式的压缩和解压,下面的示例直接从rar格式文件读取并解压文件。
using (Stream stream = File.OpenRead(@"C:\Code\sharpcompress.rar"))
{
var reader = ReaderFactory.Open(stream);
while (reader.MoveToNextEntry())
{
if (!reader.Entry.IsDirectory
{
Console.WriteLine(reader.Entry.FilePath);
reader.WriteEntryToDirectory(@"C:\temp");
}
}
}
4)、上面这些是从网上总结的,自己的code如下:
public static bool UnpackFiles(string file, string dir)
{
try
{
if (!Directory.Exists(dir))
{
Directory.CreateDirectory(dir);
}
ZipInputStream s = new ZipInputStream(File.OpenRead(file));
ZipEntry theEntry;
while ((theEntry = s.GetNextEntry()) != null)
{
string directoryName = Path.GetDirectoryName(theEntry.Name);
string fileName = Path.GetFileName(theEntry.Name);
if (directoryName != String.Empty)
{
Directory.CreateDirectory(dir + directoryName);
}
if (fileName != String.Empty)
{
FileStream streamWriter = File.Create(dir + theEntry.Name);
int size = 2048;
byte[] data = new byte[2048];
while (true)
{
size = s.Read(data, 0, data.Length);
if (size > 0)
{
streamWriter.Write(data, 0, size);
}
else
{
break;
}
}
streamWriter.Close();
}
}
s.Close();
return true;
}
catch (Exception )
{
throw;
}
}
4、对解压后的文件进行遍历,找出特定格式的文件进行复制放在特定的文件夹中,code 如下:
/// <summary>
/// 遍历目录及其子目录找到自己想要的文件
/// </summary>
/// <param name="dirt">源文件路径</param>
/// <param name="dis">数据存储路径</param>
/// <param name="type">查找的格式" *.jpg"</param>
private static void Director(string dirt , string dis,string type)
{
DirectoryInfo dir = new DirectoryInfo(dirt);
//下面第二个参数表示搜索包含子目录中的文件;
foreach (FileInfo file in dir.GetFiles(type, SearchOption.AllDirectories))
{
//如果已经有重名文件则对文件进行覆盖。
file.CopyTo(Path.Combine(dis, file.Name),true);
}
}