這兩天用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);
}
}