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

دمج عدة ملفات في ملف واحد

بدأه شبح البرمجة في 15 أغسطس 2009 · 5 رد · 709 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

أنا أريد أن أقوم بوضع عدة ملفات مختلفة من حيث النوع يعني مثلا:

image.jpg + launch.exe + audio.mid

مضاف إليهم البرنامج الرئيسي الذي سيقوم باستخراجهم عند بداية التشغيل

والفكرة التي أحاول تنفيذها هي

أن الملف التنفيذي سيتكون كالآتي:

MainEXE DATA

##########

Files Names

for example 3files

##########

File1 Data

##########

File2 Data

##########

File3 Data

وبذلك لن أحتاج لحفظ حجم الملفات و في نفس الوقت الطريقة بسيطة عندكل ####### سوف يقوم البرنامج بنقل البيانات إلى ملف جديد

ولكن المشكلة بعد الحفظ لا أعرف كيف يمكنني إستخراج الملفات

وقمت بالبحث في المنتدى ووجدت عدة مواضيع مفيدة ولكن جميع الأكواد كانت معتمدة على الـ Structure

وجربت إستخدام

IO.Binaryreader

ولا كن يجب تحديد كمية البيتات المقرؤة (حجم الملف المستخرج ) ولو سمحتوا لا أريد إستخدام الـ

Structures

أريد إستخدام طريقة بسيطة :lol:

وهذه طريقة !!مبدئية!! للحفظ


Private Sub cmdCreate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdCreate.Click
Dim FileNo As Integer = FreeFile()
Dim SIZE As Integer
Dim SFILE As String


SFILE = "D:\SE\IMAGE.JPG"
FileOpen(FileNo, "D:\TESTSE.EXE", OpenMode.Binary)
FilePut(FileNo, IO.File.ReadAllBytes(SFILE))
SIZE = FileLen(SFILE)
Seek(FileNo, SIZE)
FilePut(FileNo, "########")


SFILE = "D:\SE\SOUND.mid"
FilePut(FileNo, IO.File.ReadAllBytes(SFILE))
SIZE = FileLen(SFILE)
Seek(FileNo, SIZE)
FilePut(FileNo, "########")
FileClose(FileNo)

End Sub

تم تعديل هذه المشاركة بواسطة شبح البرمجة في 15 أغسطس 2009 في 14:52

#2

ألا ترى معي أن أحد الملفات يمكن أن يحتوي على واحدة أو أكثر من ####### و خصوصا ملفات binary?!

أنا أرى أنه يمكن تطبيق هذه الطريقة على ملفات نصية على أن يكون الفارق بين الملفات خليط من Chr(255) Chr(0) و ماشابهها من الكراكتر التي لا يمكن لمستخدم عادي زيادتها إلى ملف نصي. أما بالنسبة لملف binary فلا يمكنك التكهن بخليط الكراكتر الذي لا يمكن أن يحتوي عليه ملف من هذا النوع.

تحياتي...

#3

جزاك الله خير

ولكن أنا أقصد أن Reader يقوم بعمل Seek إلى أن يصل إلى (#######) أو مثلا (#@$%&*) مجتمعة

ويمكن التفكير قي عمل فاصل أكثر وضوحا بين الملفات

بس ياريت لو ممكن تعطيني الكود

لأن قمت بعمل عدة التجارب ولم تنجح

والسبب هو الوصل بين الReader للملف الأول(المحتوي على جميع الملفات) والwriter للملف الثاني(الذي سيكون أحد الملفات المستخرجة) في عملية الExtracting

وشكرا لك

#4

UP

#5

مع أنني لا أوافق على المبدأ لكن هذا كود قد يفيدك في كتابة كود مشخص للعمل الذي تريد القيام به.

ملاحظة : هذا الكود غير مجرب و قد يحتوي على أخطاء و هو مكتوب لملفات نصية فقط.

		' عدد الملفات الموجودة
		Dim fileNumber As Integer
		' الملف الحاوي للملفات المدمجة
		Dim sr As New StreamReader("path")
		fileNumber = 0
		While Not sr.EndOfStream
			Dim s As String
			' انشاء ملف لنسخ البيانات من الملف الجامع
			Dim sw As New StreamWriter("file" + (fileNumber + 1).ToString() + ".ext")
			' قراءة سطر
			s = sr.ReadLine()
			' غلق الملفين لأنه لم يبق شيء في الملف الجامع
			If s Is Nothing Then
				sw.Close()
				sr.Close()
				Return
			End If
			Dim i As Integer
			' أذا كان السطر يحوي نص فرق الملفات المدمجة
			i = s.IndexOf("#@$%&*")
			If i >= 0 Then
				' ننسخ آخر البيانات من الملف الجامع
				sw.WriteLine(s.Substring(0, i))
				' نحدد مكان بدإ القراءة التالية
				sr.BaseStream.Position = sr.BaseStream.Position - i + "#@$%&*".Length
				' غلق الملف المنسوخ
				sw.Close()
				' إلى الملف التالي
				fileNumber = fileNumber + 1
			Else
				' إذا لم يكن السطر يحتوي على نص فرق الملفتات المدمجة ننسخ السطر بأكمله
				sw.WriteLine(s)
			End If
		End While

تحياتي...

#6

جزاك الله خير ياأخي على الإفادة

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