ورود

View Full Version : مشکل با اجرای یک فایل EXE



mehdi58
سه شنبه 23 مرداد 1386, 17:40 عصر
با سلام
من می خوام یه فایل EXE رو که با پاسکال نوشته شده اجرا کنم . این فایل بعد از اجرا می بایست تعدادی فایل متنی ایجاد کنه . ( حدود 10 تا فایل که در هر کدوم هم حدود 200 تا عدد رو بعد از محاسباتش ثبت می کنه )
این فایل EXE واسه اجرا احتیاج به یه سری مقادیر داره که من اونها رو از طریق یه فایل متنی بهش میدم :




Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

'EXE ایجاد فایل متنی مورد نیاز فایل
Dim sw As StreamWriter = File.CreateText(Application.StartupPath & "\myfile.txt")
For i As Integer = 0 To myArray.Count - 1
sw.WriteLine(myArray(i))
Next
sw.Close()

'EXE اجرای فایل
System.Diagnostics.Process.Start(Application.Start upPath & "\myProgram.exe")

End Sub


وقتی روی Button کلیک می کنم فایل متنی با مقادیرش در مسیر مورد نظر ایجاد می شه و بعد فایل EXE اجرا می شه اما عملکردش درست نیست یعنی اون فایلهای متنی ای رو که می بایست تولید کنه رو ایجاد نمی کنه اما فایل EXE اجرا می شه و برنامه هم هیچ Error ای نمی ده!!!!!!!!!!!

حالا اگه من بیام و بصورت دستی فایل متنی مورد نیاز فایل EXE رو ایجاد کنم و توی برنامه ام از کد زیر استفاده کنم اون وقت با کمال تعجب می بینم که فایل EXE درست اجرا می شه و خروجیهاش هم که تعدادی فایل متنی هستن رو تولید می کنه !!!!




Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

'EXE اجرای فایل
System.Diagnostics.Process.Start(Application.Start upPath & "\myProgram.exe")

End Sub


به نظر شما چرا تو حالت اول این اتفاق نمی افته ؟؟؟؟ ( با توجه به اینکه در اون حالت من چک کردم و مطمئنم که فایل مورد نیاز واسه اجرای فایل EXE ایجاد می شه )

ghafoori
سه شنبه 23 مرداد 1386, 18:59 عصر
دوست عزیز کد sw.flush را قبل از خط sw.Close() قرار دهید تا برنامه فایل را پر کند این کد شما اطلاهات را داخل فایل نمی ریزد فقط داخل بافر نگه می دارد که با دستور بالا مشکل حل می شود

mehdi58
سه شنبه 23 مرداد 1386, 22:10 عصر
دوست عزیز کد sw.flush را قبل از خط sw.Close() قرار دهید تا برنامه فایل را پر کند این کد شما اطلاهات را داخل فایل نمی ریزد فقط داخل بافر نگه می دارد که با دستور بالا مشکل حل می شود


متشکرم
حتما این کار رو انجام میدم اما من توی کدم Breakpoint گذاشتم و وقتی از sw.close می گذشت می دیدم که فایل مورد نظر با محتویاتش توی مسیری که بهش داده بودم ایجاد شده .

malizadeh
چهارشنبه 24 مرداد 1386, 07:20 صبح
فایل متنی که برنامه تولید کرده و فابل متنی که خودتان دستی درست کرده اید رو بزارید

mehdi58
چهارشنبه 24 مرداد 1386, 20:43 عصر
دوستان عزیز خط به خط فایل متنی ای که برنامه من ایجاد می کنه رو چک کردم و هیچ ایرادی نداره ( در حقیقت این فایل متنی فقط یه ستون شامل تعدادی عدده )

و یه مورد عجیب تر اینکه اگه به روش اول ( یعنی همون روشی که فایل توسط برنامه ایجاد می شه ) برنامه EXE رو اجرا کنم که مطمئنا اجرا نمی شه اما از برنامه خارج بشم یعنی فرم رو ببندم و دفعه بعد اون رو RUN کنم فایل EXE کارش رو درست انجام می ده . حالا تو این موندم که چرا مرتبه اول فقط این اتفاق می افته . یعنی فایل EXE چرا قادر نیست همون دفعه اول محتویات فایل متنی من رو بخونه اما دفعات بعدی این ایراد رو نمی گیره ؟؟؟

mehdi58
چهارشنبه 24 مرداد 1386, 20:46 عصر
دوست عزیز کد sw.flush را قبل از خط sw.Close() قرار دهید تا برنامه فایل را پر کند این کد شما اطلاهات را داخل فایل نمی ریزد فقط داخل بافر نگه می دارد که با دستور بالا مشکل حل می شود
این کار رو انجام دادم و باز هم درست نشد .
همونطور که گفتم من توی برنامه Breakpoint گذاشتم و خط به خط اون رو چک کردم و دیدم که فایل متنی با همون محتویات مورد نظر ایجاد شد .
واقعا گیج شدم !!!!!:ناراحت::ناراحت::ناراحت:

ghafoori
پنج شنبه 25 مرداد 1386, 09:01 صبح
دستور sw.Dispose() را بعد از sw.close قرار بده تا sw کامل از بین رود فکر کنم در این صورت جواب بده

abbas.net
جمعه 26 مرداد 1386, 18:40 عصر
سلام .
جواب شما معلومه.یک کلام.
در فایل exe که با turbo pascal نوشته شده ; بعد از open کردن فایل متنی باید آن را close کند. به همین راحتی به همین خوشمزگی.

mehdi58
جمعه 26 مرداد 1386, 20:42 عصر
سلام .
جواب شما معلومه.یک کلام.
در فایل exe که با turbo pascal نوشته شده ; بعد از open کردن فایل متنی باید آن را close کند. به همین راحتی به همین خوشمزگی.

یعنی شما می گی توی فایل EXE این کار انجام نشده.
اگه هم این طور باشه پس چرا مرتبه دوم و پس از ورود مجدد به برنامه ( منظورم روش دومه که عرض کردم ) این فایل EXE کارش رو درست انجام میده ؟؟؟؟