PDA

View Full Version : آموزش: آموزش فشرده سازی با استفاده از کتابخانه NET Zip Library



ایمان مدائنی
یک شنبه 29 اردیبهشت 1392, 16:25 عصر
سلام دوستان

امروز براتون آموزش فشرده سازی فایل و دایرکتوری ها با استفاده از کتابخانه Dot Net Zip Library آماده کردم

البته نمونه هم کنارش گذاشتم تا بتونید کاملا یاد بگیرید

خب شروع میکنیم

در مرحله اول Dll یا همون کتابخانه ICSharpCode.SharpZipLib.dll رو به پروژه اضافه می کنیم

بعد باید فضای نام اون رو اضافه کنیم


using ICSharpCode.SharpZipLib.Zip;

در مرحله بعد من کد هارو در رویداد کلیک یک Button نوشتم یعنی زمانی که کلیک زده میشه یک FolderBrowserDialog و از کاربر میخواد تا دایرکتوریه مورد نظر رو جهت فشرده سازی انتخاب کنه


private void button2_Click(object sender, EventArgs e)
{
FolderBrowserDialog op = new FolderBrowserDialog();
if (op.ShowDialog() == DialogResult.OK)
{
// انتخاب پوشه مورد نظر جهت فشرده سازی
string[] aFilenames = Directory.GetFiles(op.SelectedPath);
// the name of the Zip File is the second Parameter passed in calling
ZipOutputStream s = new ZipOutputStream(File.Create(Application.StartupPat h+@"\my.zip"));
// Set compression level: 0 [none] - 9 [highest]
s.SetLevel(5);
for (int i = 0; i < aFilenames.Length; i++)
{
FileStream fs = File.OpenRead(aFilenames[i]);
// normally, the Buffer is allocated once,
// here we do it once per File for clarity's sake
byte[] buffer = new byte[fs.Length];
fs.Read(buffer, 0, buffer.Length);
// and now we write a ZipEntry & the Data
ZipEntry entry = new ZipEntry(aFilenames[i]);
s.PutNextEntry(entry);
s.Write(buffer, 0, buffer.Length);
}
s.Finish();
s.Close();
MessageBox.Show("فشرده سازی با موفقیت انجام شد");
}
}

}

خب حالا به بررسی قسمت ها کد میپردازیم :


FolderBrowserDialog op = new FolderBrowserDialog();
if (op.ShowDialog() == DialogResult.OK)
{

در اینجا چک کردیم که اگه کاربر مسیری رو انتخاب کرده بود کدها اجرا بشه


string[] aFilenames = Directory.GetFiles(op.SelectedPath);

در قسمت بالا فایل های موجود در مسیر را خوانده و در یک آرایه قرار دادیم که برای کار کردن با فایلها از فضای نام زیر استفاده کردیم


using System.IO;

قسمت بعدی :


ZipOutputStream s = new ZipOutputStream(File.Create(Application.StartupPat h+@"\my.zip"));

در این قسمت محل ذخیره فایل فشرده تعیین می شود که ما اون رو کنار پروژه قرار دادیم با نام My.Zip


// Set compression level: 0 [none] - 9 [highest]
s.SetLevel(5);



در قسمت بالا نوع فشرده سازی تعیین میشه که از 0 تا 9 قایل انتخاب می باشد

و بقیه کد ها هم تک تک فایلها رو از مسیر خونده با استفاده از یک حلقه و ذخیره میکند



امیدوارم خوشتون اومده باشه

البته این کتابخانه قابلیت رمز گذاری روی فایل فشرده رو هم داره و کلی امکانات دیگر


s.Password = "123";

نمونه پروژه آموزش داده شده هم ضمیمه می باشد

موفق و پیروز باشید

منبع مقاله Madaeny.com (http://www.madaeny.com/Article/533/)

esafb52
سه شنبه 31 اردیبهشت 1392, 02:09 صبح
با سلام و این هم نحو ه استرکت فایل های زیپ با همین کتابخانه
متد استرکت فایل های زیپ

public static void UnZipFiles(string zipPathAndFile, string outputFolder, bool deleteZipFile)
{
ZipInputStream s = new ZipInputStream(File.OpenRead(zipPathAndFile));
ZipEntry theEntry;
string tmpEntry = String.Empty;
while ((theEntry = s.GetNextEntry()) != null)
{
string directoryName = outputFolder;
string fileName = Path.GetFileName(theEntry.Name);
// create directory
if (directoryName != "")
{
Directory.CreateDirectory(directoryName);
}
if (fileName != String.Empty)
{
if (theEntry.Name.IndexOf(".ini") < 0)
{
string fullPath = directoryName + "\\" + theEntry.Name;
fullPath = fullPath.Replace("\\ ", "\\");
string fullDirPath = Path.GetDirectoryName(fullPath);
if (!Directory.Exists(fullDirPath)) Directory.CreateDirectory(fullDirPath);
FileStream streamWriter = File.Create(fullPath);
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();
if (deleteZipFile)
File.Delete(zipPathAndFile);
}


و این هم نحوه استفاده :

private void button1_Click(object sender, EventArgs e)
{

FileDialog fd= new OpenFileDialog();
fd.Filter = "zipfiles(*.zip)|*.zip";
if (fd.ShowDialog()==DialogResult.OK)
{
string pathunzip;
FileInfo fi= new FileInfo(fd.FileName);
pathunzip = fi.Directory.ToString();
UnZipFiles(fd.FileName, pathunzip, false);
MessageBox.Show("ok unzip!!!!!!!");

}


}

موفق باشین

vahid2112
سه شنبه 07 خرداد 1392, 00:44 صبح
سلام
چند تا عیب داره:
1.اینه که تمامی فولدرهای پدر مربوط به پوشه انتخابی رو تا اول درایو جز زیپ میکنه
2.اگه پوشه انتخابی دارای فولدر باشه اونها رو زیپ نمیکنه!

امکان اصلاحش هست؟؟:لبخندساده: