الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

عمل برنامج ليضغط الملفات

مغلق
بدأه روح الفيجوال بيسك نت في 20 أغسطس 2007 · 10 رد · 1,356 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاتة

اعزائي الكرام اني احاول عمل برنامج شبية لل WinRAR او WinZip الذي يقوم بضغط الملفات

ممكن اعرف اذا كان من الممكن ان اسوي برنامج يقوم بضغط الملفات ... او ان الامر صعب ويجب ان نيئس

ان كانت الاجابة نعم ... فيا ليت من كود او شخص يقول الفكرة التي تتم بها العملية (ضغط الملفات)

تم تعديل هذه المشاركة بواسطة روح الفيجوال بيسك نت في 20 أغسطس 2007 في 23:59

if You.needhelp = true then

msgbox ("Never Ever Ask dam Question  Before Searching in google")

Else 

msgbox ("You are Doing Good")

End if
#2

وعليكم السلام ورحمة الله تعالى وبركاته

يوجد صفين في .NET يقومان بعملية الضغط لأي ملف هما GZipStream و DeflateStream

لاحظ المثال التالي:

Module Module1
	Sub Main()
		Dim sourceFile As IO.FileStream = IO.File.OpenRead("F:\test.txt")

		Dim destFile As IO.FileStream = IO.File.Create("F:\test1.txt")

		Dim gZip As IO.Compression.GZipStream = New IO.Compression.GZipStream(destFile, IO.Compression.CompressionMode.Compress)

		While (sourceFile.Position <> sourceFile.Length)
			gZip.WriteByte(Convert.ToByte(sourceFile.ReadByte()))
		End While

		gZip.Close()
		sourceFile.Close()
	End Sub

End Module

كود C#

FileStream sourceFile = File.OpenRead(@"F:\test.txt");
FileStream destFile = File.Create(@"F:\test1.txt");

//DeflateStream gZip = new DeflateStream(destFile, CompressionMode.Compress);

GZipStream gZip = new GZipStream(destFile, CompressionMode.Compress);

while (sourceFile.Position != sourceFile.Length)
{
	gZip.WriteByte((byte)sourceFile.ReadByte());
}

gZip.Close();
sourceFile.Close();

أما الصف DeflateStream فيقوم بنفس العمل إلا أنني أعلم إذا أردت أن تضفط ملفا وأي برنامج يعتمد تقنية الضفط Zip سوف يقوم بفك ضغطه، لأنه يضيف معلومات في بداية الملف تمكن هذه البرامج من فك الضغط، أما DeflateStream فلا وبالتالي سيكون حجم الملف الناتج من خلال هذا الصف أصغر من الملف الناتج عن الضغط من خلال الصف GZipStream

أما من أجل فك ضغط الملف برمجيا هو نفس الكود السابق ولكن مع تغير البرامتر في باني الصف GZipStream من IO.Compression.CompressionMode.Compress

إلى

IO.Compression.CompressionMode.Decompress

وشكرا

تم تعديل هذه المشاركة بواسطة عبد الكريم كنعان في 21 أغسطس 2007 في 06:16

#3

اشكرك يا الغالي على ما قدمة من معلموت التي استفدت منها

بارك الله فيك والى الامام

if You.needhelp = true then

msgbox ("Never Ever Ask dam Question  Before Searching in google")

Else 

msgbox ("You are Doing Good")

End if
#4

الاخ الفاضل عبدالكريم كنعان

تحية طيبة لك ولجميع الاخوة بالمنتدى

قمت بتجربة الكود الخاص بضغط الملفات لكنى لم استطع استعادة الملف بعد ضغطه رغم تغير الكود كما ذكرت من

IO.Compression.CompressionMode.Compress

إلى

IO.Compression.CompressionMode.Decompress

وكانت رسالة الخطأ خاصة بالسطر

			gZip.WriteByte(Convert.ToByte(sourceFile.ReadByte()))

وشكراً لكم ولجميع الزملاء

سبحانك اللهم لا علم لنا إلا ما علمتنا

#5

ملحوظة

قمت باستخدام الطريقة السابقة التى ذكرتها مرة باستخدام GZipStream ومرة باستخدام DeflateStream على ملف نصى وفى الحالتين كانت رسالة الخطأ كما تلاحظ ان حجم الملف لم يقل أو يضغط وإن كانت هناك فروق فى حجم الملف بين الطريقتين

#6

هل في رسالة الخطأ أنه لم يعثر على الملف المطلوب؟؟

Dim sourceFile As IO.FileStream = IO.File.OpenRead("F:\test.txt")

السطر السابق فيه ملف يفتح للقراءة - يعني يجب أن يكون موجود سابقا - تأكدي من أنه موجود في الدليل كما هو و إذا كان ليس كذلك قومي بإنشائه و أعتقد أنها تنحل

تم تعديل هذه المشاركة بواسطة SalehRam في 30 أغسطس 2007 في 11:41

lxcs.png

syria-flag_small.jpg

#7

لاء الملف موجود وبعد ما قمت بضغطة ارغب باستعادة الملف الاصلى من الملف المضغوط ماذا افعل ؟

شكراُ لاستجابتك

سبحانك اللهم لا علم لنا إلا ما علمتنا

#8

مرحبا،،

أعتذر عن عدم الرد ولكن لم انتبه إلى رودودكم

في المثال التالي يوضح كيفية عملية الضغط وفك الضغط

وشكرا

Zip.zip

#9

موضوع له علاقة بالسؤال المطروح هنا معلومة/Compress and Decompress Data, .net frame work 2 وهو للأخ SOLO.NET

تم تعديل هذه المشاركة بواسطة محمد سامر أبو سلو في 31 أغسطس 2007 في 11:36

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#10

عفواً اخى الفاضل عبد الكريم كنعان المثال به نفس الخطأ وهو الخاص باستعادة الملف الاصلى من الملف المضغوط

theByte = Convert.ToString(gZip.ReadByte())

فما هو الحل وان كنت اعتقد انه على علاقة بقيم المتغيرات وعد القدرة على اعادة تحويلها من متغير (String) إلى (Byte) والعكس

فهل هناك حل لهذا الموضوع ؟

علماً باننى ارغب فى اسناد محتويات الملف الاصلى لمتغير نصى من نوع (String) ثم ضغط محتويات المتغير ثم كتابته للملف الجديد

وعند الرغبة فى استعادة المعلومات المضغوطة ارغب ايضا فى اسنادها لمتغير نصى لكننى لا استطيع تحويله لمصفوفة اوى اى نوع اخر

فهل هناك اى حل لذلك ؟

سبحانك اللهم لا علم لنا إلا ما علمتنا

#11

اخوانى الاعزاء وجدت الحل فعلاً فى مشاركة الاخ SOLO.NET ومثاله فى غاية الروعة والجمال

وقمت بتعديل الكود ليقوم بانتاج ملفين احدهما مضغوط والاخر يقوم بفك الملف المضغوط

إلا ان هناك مشكلة لم اصل لحلها بعد خاصة بالنصوص العربية فتقراء على شكل علامات استفهام

فهل هناك حل لذلك ؟

Imports System.IO.Compression
Imports System.IO
Public Class Form1
	Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
		' Read original file.
		Dim SourceFile As String = "c:\test.txt"
		Dim fsRead As New FileStream(SourceFile, FileMode.Open)
		Dim FileBytes(CInt(fsRead.Length - 1)) As Byte
		fsRead.Read(FileBytes, 0, FileBytes.Length)
		fsRead.Close()
		' Write to a new compressed file.
		Dim TargetFile As String = "c:\test1.txt"
		Dim fsWrite As New FileStream(TargetFile, FileMode.Create)
		Dim CompressStream As New DeflateStream(fsWrite, CompressionMode.Compress)
		CompressStream.Write(FileBytes, 0, FileBytes.Length)
		CompressStream.Flush()
		CompressStream.Close()
		fsWrite.Close()
	End Sub
	Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
		Dim SourceFile As String = "c:\test1.txt"
		Dim fsRead As New FileStream(SourceFile, FileMode.Open)
		Dim DecompressStream As New DeflateStream(fsRead, CompressionMode.Decompress)
		Dim Reader As New StreamReader(CType(DecompressStream, Stream))
		FileOpen(1, "c:\test2.txt", OpenMode.Binary)
		FilePut(1, (Reader.ReadToEnd()))
		FileClose(1)
		Reader.Close()
		fsRead.Close()
	End Sub
End Class

هذا الموضوع مغلق.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…