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

تبادل البيانات بين البرامج

مغلق
بدأه ihsan_ahmed في 26 أكتوبر 2006 · 6 رد · 701 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

اخوان حقيقة قريت لغة بيرل ووجدت بيها طرق رائعة لل pipe و هو تنفيذ برنامج و اخذ مخرجاته و ارسالها الى برنامج اخر , مثلا تنفيذ برنامج ال netview ليعيد اسماء الحاسبات على الشبكة ثم اخذ المخرجات من هذا البرنامج (وهي اسماء الحاسبات في هذه الحالة) و ارسالها الى برنامج اخر ليتعامل معها او ملف لتخزينها , و انا اتساءل كيف اقوم بذلك عن طريق vb.net , و انا اعتقد انه يتم ذلك باستخدام الفئة processStartInfo

ولدي سؤال اخر و هو ارجو ممن لديه المعرفة بشرح هذه المكتبة processStartInfo

#2

أولا - ProcessStartInfo هو تركيب يستخدم لتمرير محددات تشغيل أي برنامج للدالة Process.start فإن كنت تريد تمرير المعلومات عبر محددات سطر الأوامر يمكنك مراجعة عناصر هذا التركيب في مكتبة MSDN

ثانيا - بالنسبة لتبادل المعلومات بين البرامج فالطريقة الأحدث والأعم حسب ما رأيت هي استخدام ملفات XML حيث تقوم بتصدير البيانات إلى ملف xml ثم استيرادها من البرنامج الذي سيعالج هذه المعلومات

ثالثا - يرجى عدم وضع أكثر من سؤال في نفس الموضوع

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

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

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

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

#3

مشكور على الرد اخي

لكن اذا تقصد بملف xml عن طريق الكائن binayformatter فاعتقد انه يكون ملف xml لايستطيع اي برنامج اخر فتحه اي فقط البرنامج الذي صنع ملف xml يستطيع استرداد المعلومات منه لغرض ال security

#4
ihsan_ahmed كتب:
مشكور على الرد اخي

لكن اذا تقصد بملف xml عن طريق الكائن binayformatter فاعتقد انه يكون ملف xml لايستطيع اي برنامج اخر فتحه اي فقط البرنامج الذي صنع ملف xml يستطيع استرداد المعلومات منه لغرض ال security

هذا الكلام غير صحيح فقد استعملت شخصيا ملفات xml لنقل البيانات عبر البرامج وتمت العملية بنجاح ولاعلاقة لموضوع الـ Security بهذا الأمر

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

ملفات الـ xml هي ملفات نصية بصيغة معينة مثل ملفات الـ html تماما ثم أنت تستخدمها كثيرا عندما تقوم بالبرمجة - ملف app.config ملفات الـ Dataset وملفات أخرى تأكد من معلوماتك قبل أن تحكم بأنه لايمكن

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

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

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

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

#5

نعم اخي... مشكور على تعقيبك

لكن اقول ما اعرف و انا لست متاكد و لكني مجرب فقط و الله اعلم و هو اني جربت انه اذا اردت ان احفظ أي كائن object كأن يكون arraylist في ملف باستخدام الكود التالي فاني لاحظت بانه لا يمكنني ان استرد الكائن من الملف باستخدام برنامج اخر و ارجو ان تقرا الكود :

هذا الكود لحفظ الكائن في ملف :

Dim fs as new filestream("filename.xml",create)
Dim bf as new binaryformattor
Bf.serialize(fs,"MyObject")
Fs.close

الان هذا الكود لاسترجاع الكائن من الملف :

Dim fs as new filestream("filename.xml",open)
Dim bf as new binaryformattor
Dim obj as object
Obj=bf.deserialize(fs)
Fs.close

وارجو ان تعلمني كيف انت فعلت ذلك ... الله يجازيك بالخير

#6

على ذكر ArrayList أنا فعلا مخزن جزء من بيانات برنامجي عن طريق الـ ArrayList إلى ملف xml وذلك منذ أيام VB2003 يعني الكود الذي سأضعه الآن بعمل على الـ VB2003 و الـ VB2005 كما تجدر ملاحظة أن الأكواد هنا تعمل على أي Object وليس فقط ArrayList

كود التخزين

	' Serialize an object to a file in SOAP format.
	Sub SaveSoapData(ByVal path As String, ByVal o As Object)
		Try
			' Open a file stream for output.
			Dim fs As FileStream = New FileStream(path, FileMode.Create)
			' Create a SOAP formatter for this file stream.
			Dim sf As New SoapFormatter(Nothing, _
			New StreamingContext(StreamingContextStates.File))
			' Serialize the array to the file stream, and close the stream.
			sf.Serialize(fs, o)
			fs.Close()
		Catch ex As Exception
			ex = Nothing
		End Try
	End Sub

كود الاستعادة

	' Deserialize an object from a file in SOAP format.
	Function LoadSoapData(ByVal path As String) As Object
		Try
			' Open a file stream for input.
			Dim fs As FileStream = New FileStream(path, FileMode.Open)
			' Create a SOAP formatter for this file stream.
			Dim sf As New SoapFormatter(Nothing, _
			New StreamingContext(StreamingContextStates.File))
			' Deserialize the contents of the stream into an object and close the stream.
			LoadSoapData = sf.Deserialize(fs)
			fs.Close()
		Catch ex As Exception
			MsgBox(ex.Message)
			ex = Nothing
			Return Nothing
		End Try
	End Function

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

Imports System.Runtime.Serialization
Imports System.Runtime.Serialization.Formatters.Soap

وهذا مثال فعلي عن استخدام الدالتين

الحفظ

SaveSoapData(Data1, DataArr)

الاستعادة

DataArr = LoadSoapData(Data1)

حيث Data1 اسم ملف البيانات

DataArr الـ ArrayList

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

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

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

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

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

#7

أي والله .. مشكور يا اخي جزيل الشكر والله عملت و استطعت ان استرد المعلومات من برنامج اخر

لذا لتعم الفائدة للجميع اسرد الان شرحها :

يمكنك أن تحفظ الكائنات في تنسيق نصّيّ عن طريق الخليّة SoapFormatter.. إنّ كلمة (SOAP) هي اختصار لمصطلح "البروتوكول البسيط للتعامل مع الكائنات" Simple Object Access Protocol.. ويحفظ هذا المنسّق الكائن في تنسيق XML، التي تمتاز بالحشو وكبر الحجم مقارنة بالملفّات الثنائيّة، ولكن رغم ذلك تعتبر الآن قياسيّةً لتبادل المعلومات بين العمليات والبرامج وأنظمة التشغيل المختلفة وعبر الإنترنت.

ولاستخدام هذا المنسّق النصّيّ، يجب أولا أن تضيف مرجعا له في البرنامج.. اضغط بزر الفأرة الأيمن على كلمة "مراجع" References في متصفّح المشاريع، ومن القائمة الموضعيّة اضغط "إضافة مرجع" Add Reference.. في مربّع الحوار الذي سيظهر لك اضغط شريط .NET، ومن القائمة ابحث عن المرجع التالي ثم انقره بالفأرة مرّتين، حتّى ينتقي القائمة الموجودة في الجزء السفليّ من مربّع الحوار:

System.Runtime.Serialization.Formatters.Soap

بعد إغلاق مربّع الحوار، أضف جملة الاستيراد التالية لبداية الملفّ:

Imports System.Runtime.Serialization.Formatters.Soap

الآن يمكنك تعريف متغيّر من هذه الخليّة:

Dim formatter As Soap.SoapFormatter

والمثال التالي يريك كيف نحفظ كائنين من النوع مستطيل Rectangle في الملفّ "C:\SHAPES.BIN".. ولا غبار عليك في اختيار اسم الملفّ أو امتداده أن تجعلهما كما تهوى:

Dim R1 As New Rectangle(1,1,10,20)
Dim R2 As New Rectangle(10,10,100,200)
Dim saveFile As FileStream =  File.Create("C:\SHAPES.BIN")
Dim formatter As New BinaryFormatter
formatter.Serialize(saveFile, R1)
formatter.Serialize(saveFile, R2)
saveFile.Close() ' يجب إغلاق الملفّ بعد انتهائك من الكتابة فيه

و كذلك شاهدوا المثال السابق للاخ سامر

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

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