PDA

View Full Version : حرفه ای: دانلود فایلهای برنامه با Manam Updater



alimanam
چهارشنبه 31 شهریور 1389, 17:54 عصر
با سلام

دوستان عزیز با این کامپوننتی که نوشتم میتونین به راحتی و سرعت خوب فایلهای مورد نیاز یک برنامه رو از وب دانلود کنین ( مثل فایلهای dll ) بعد با یه بار Restart کردن برنامه ازشون استفاده کنین . نمونه سورسی که پیوست هست کاملاً گویاست و کار کردن باهاش بسیار آسان . امیدوارم که مفید باشه .

فعلا فقط پرتکول HTTP رو ساپورت میکنه اما وقت کردم حتماً FTP رو هم بهش اضافه می کنم .

موفق باشید .

دانلود (http://alimanam.persiangig.com/download/Manam-Updater.rar)


http://916103.20upload.net/files/sh3/12851666041.png

محسن شامحمدی
چهارشنبه 31 شهریور 1389, 20:33 عصر
علی جان من برنامه خوبتو تست کردم ولی مشکلم اینه که واسه من سایز فایلو درست می گه ولی دانلود رو شروع نمی کنه.
مشکل از چیه؟
http://barnamenevis.org/forum/attachment.php?attachmentid=56910&stc=1&d=1285176823

alimanam
پنج شنبه 01 مهر 1389, 10:05 صبح
با سلام


واسه من سایز فایلو درست می گه ولی دانلود رو شروع نمی کنه.یعنی اصلاً فایل رو دانلود نمی کنه ؟ !!! یا دانلود میشه اما Progress قابل مشاهده نیست ؟ اگه دومی اتفاق میافته به این خاطره که فایل دانلود دارای حجم کمی ایست ( زیر 100 کیلو بایت ) به همین خاطر قبل از اعمال تغییر در رویدادی که برای تغییر Progressbar نوشتم کار دانلود فایل به اتمام میرسه و کامپوننت خودش رو میکشه . راستی فکر کنم اگه از Dialup استفاده کنی شاید دیگه جریان بالا اتفاق نیافته .

به نظر دوستان چه چیز دیگه ایی باید به غیر از پشتیبانی از FTP بهش اضافه کرد ؟ لطفاً اگه پیشنهاد یا انتقادی دارین بفرمائین . من سعی کردم تا اونجایی که میشه کار برنامه نویس راحت باشه . چون از کنترل BackgroundWorker استفاده کردم به هیچ وجه فرم شما Friz نمیشه . کار با این کامپوننت فوق العاده دارای انعطافه مثلاً می تونین یه لیستی از فایل های مورد نیاز که باید دانلود بشن رو از هر نقطه ( هارد دیسک یا وب هاست ( با دانلود نمودن فایل متنی ) درون یه Loop بریزین تا همه رو دانلود کنه و و و ( بسته به تبحر شما ( من اسمش رو میزارم تجربه شما ) می تونین ازش کار بکشین . موفق باشید .

hero4000
پنج شنبه 01 مهر 1389, 11:33 صبح
علی جان من برنامه خوبتو تست کردم ولی مشکلم اینه که واسه من سایز فایلو درست می گه ولی دانلود رو شروع نمی کنه.
مشکل از چیه؟

فکر کنم مشکل از مسير ذخيره سازي فايلتون باشه .

احتمالا به آدرسي که وجود نداره آدرس دادين

محسن شامحمدی
پنج شنبه 01 مهر 1389, 14:35 عصر
فکر کنم مشکل از مسير ذخيره سازي فايلتون باشه .

احتمالا به آدرسي که وجود نداره آدرس دادين

بله متاسفانه اشکال کار از همین بود.
جناب علی آقا مسیر سورسشون رو C:\Users\Ali\Desktop داده بودن که چون ویندوز من ایکس پی هستش این مسیر وجود نداره:شیطان:
اون پایین System.IO.DirectoryNotFoundException هم می داد ولی دقت نکرده بودم
در کل دستتون درد نکنه خیلی چیز جالب و simple ای هستش.

محسن شامحمدی
پنج شنبه 01 مهر 1389, 21:26 عصر
لطفاً اگه پیشنهاد یا انتقادی دارین بفرمائین
یک پیشنهاد داشتم:
فرض کنید من می خوام فقط از کلاس dll تون استفاده کنم و نمی خوام اون رو به کاربر نشون بدم.
حالا می خوام درصد پیشرفت رو هم داشته باشم.
یعنی اینکه درصد پیشرفت داتلود رو توی یک لیبل نشون بدم
مثلا یک property داشته باشه به نام value که توش میزان دانلود شده رو از صددرصد نشون بده.

لطفا اگر در حال حاضر چنین چیزی داره به من هم بگید:بوس:

alimanam
جمعه 02 مهر 1389, 00:49 صبح
با سلام

مثلا یک property داشته باشه به نام value که توش میزان دانلود شده رو از صددرصد نشون بده.ای بابا یعنی ظاهرش اینقدر غلط اندازه :بامزه: دوست عزیز فایل ضمیمه حاوی فایل درخواستی شماست . فقط یادت باشه که آبجکتی که از کامپوننت به ارث می بری رو در قسمت زیر کلاس فرم تعریف کن . اینم که کد نمونه .

Dim x2 As Manam_Updater.MUpdater = New Manam_Updater.MUpdater
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
ProgressBar1.Value = x2.ProgressValue
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click

x2.WhereToSave = "C:\Users\Ali\Desktop"
x2.Addlink("http://manam.noads.biz/downloads/Zip/ManamSnippetMaker.rar")
Panel1.Controls.Add(x2)
x2.Dock = DockStyle.Top
x2.StartUpdate()
End Sub

به جز امکان جدید بالا یک خصوصیت جدید هم بهش اضافه کردم که به برنامه نویس این امکان رو میده که دکمه Cancel رو غیر فعال یا فعال کنه . موفق باشید

x2.CancelButtonEnable = False

محسن شامحمدی
جمعه 02 مهر 1389, 09:46 صبح
علی جان یک مشکل دیگه البته نمی دونم باز اشکال از منه یا از DLL شما:بامزه:
من دقیقا این کدهارو تو برنامم نوشتم .
Dim m As New Manam_Updater.MUpdater
m.Addlink("http://vbupload.persiangig.com/Archive/dastan.zip")
m.WhereToSave = Application.StartupPath & "\file.zip"
m.Update()


وقتی به خط اضافه کردن لینک می رسه این expection رو می ده

Win32 handle that was passed to Icon is not valid or is the wrong type.

alimanam
جمعه 02 مهر 1389, 12:14 عصر
با سلام

من دقیقا این کدهارو تو برنامم نوشتم .
خوب عزیزم اشتباه نوشتی !!! پروپرتی WhereToSave فقط مسیر ذخیره سازی فایل درخواستی در لینک رو فبول می کنه ( بدون نام فایل ) فقط مسیر پوشه ذخیره سازی فایل دانلودی

مثل Application.StartupPath یا C:\my folder

نام فایل , سایز , آیکن , و Extension فایل به صورت هوشمند از لینک داده شده استخراج میشه و بعد اون فایل رو در مسیری که برنامه نویس براش تعریف کرده شروع به دانلود میکنه . امیدوارم که متوجه شده باشی چون دیگه از این آسون تر نمیشد توضیح بدم . موفق باشید .

محسن شامحمدی
جمعه 02 مهر 1389, 13:47 عصر
متوجه شدم ولی مشکل من توی خط اوله

m.Addlink("http://vbupload.persiangig.com/Archive/dastan.zip")
من این خط رو قبل از خط wheretosave نوشتم و تو این خط مشکل دارم.
یعنی کدم رو اینطوری هم تغییر دادم ولی مشکل خط اول پابرجاست

Dim m As New Manam_Updater.MUpdater
m.Addlink("http://vbupload.persiangig.com/Archive/dastan.zip")
m.WhereToSave = "c:\a"
m.Update()

اصلا یک لطف می کنید همین کد رو رو سیستم خودتون تست کنید. شاید مشکل از فایل من باشه

alimanam
جمعه 02 مهر 1389, 14:52 عصر
با سلام

این خطا به این خاطر رخ می ده که شما قبل از اینکه پروپرتی WhereToSave رو مقدار دهی کنی به کنترل لینک ارسال کردین . باید بعد از ایجاد m بلافاصله WhereToSave رو مقدار دهی کنین ( آدرس ذخیره کردن فایل رو مشخص کنین ) بعد به کنترل لینک ارسال کنین . ( جای WhereToSave و Addlink رو عوض کن ) .

راستی برای اجرای درست حتماً به یه کنترل دیگه باید add اش کنی . مانند :


m.Dock = DockStyle.Top
Panel1.Controls.Add(m)

موفق باشید .

محسن شامحمدی
جمعه 02 مهر 1389, 16:23 عصر
راستی برای اجرای درست حتماً به یه کنترل دیگه باید add اش کنی
بله متاسفانه مشکل از همین قضیه بود که از 2 روز منو سرکار گذاشته بود :گیج:
و ارتباط چندانی به where to save نداشت :خجالت:
-----------------------
یک پیشنهاد و یا سوال.
چطور می شه فهمید دانلود تمام شده است.؟
آیا برای این قضیه Event گذاشته اید؟

منو ببخشید اینقدر سوال می کنم . راستش دوست دارم dll تون کامل باشه چون خیلی چیز جالبیه حیفه ناقص باشه

alimanam
جمعه 02 مهر 1389, 19:31 عصر
با سلام

یک پیشنهاد و یا سوال.
چطور می شه فهمید دانلود تمام شده است.؟
آیا برای این قضیه Event گذاشته اید؟خیر اما الان گذاشتم ! ( آخه من این کامپوننت رو برای کارهای خودم نوشته بودم و در اون پروژه نیازی نبود که به کسی چیزی اعلام بشه !!! ) اما یادم رفته بود ممکنه دوستان برنامه نویس دیگه به این رویداد نیاز داشته باشن . اگه دوستان دیگه هم مثل شما پیشنهادات خوب خودشون رو میگفتن فکر کنم کنترل خیلی خوبی میشد اما متاسفانه خیلی ها در این سایت فقط بلدن دانلود کنن . ( وارد بحث نشیم بهتره ) از شما هم که پیشنهادات خوبی دادین ممنونم . واگه باز چیزی به ذهنت میرسه بگو ( هر چیزی حتی اگه خیلی هم کوچولو باشه خودش دنیایی ایده است ) موفق باشید .

اینجوری هم میتونین از دانلود شدن لینک با خبر بشین . یا علی

Public Class Form1
Private WithEvents obj As New Manam_Updater.MUpdater
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
obj.WhereToSave = My.Computer.FileSystem.SpecialDirectories.Desktop
obj.Addlink("http://manam.noads.biz/downloads/Zip/Persian Gulf Date.rar")
Panel1.Controls.Add(obj)
obj.Dock = DockStyle.Top
obj.CancelButtonEnable = False
obj.StartUpdate()
End Sub

Private Sub obj_DownloadCompleted() Handles obj.DownloadCompleted
MsgBox("Download Completed !", MsgBoxStyle.Exclamation)
End Sub
End Class

alimanam
جمعه 02 مهر 1389, 21:17 عصر
با سلام

یکی دوتا ویژگی دیگه بهش اضافه کردم :

- اگه لینک دانلودی در مسیری که برای ذخیره سازی لینک معین شده وجود داره به کاربر اعلام می کنه که آیا مایل هست فایل حذف بشه و دانلود شروع بشه یا نه

- برای راحتی ( البته استانداردش هم همین بود ) برنامه نویس یه رویداد به اسم DownloadProgressChanged به کنترل اضافه کردم که هر وقت خواست بتونه به هرجا که لازمه پاس داده بشه .
مثل این نمونه کد :

Public Class Form1
Dim WithEvents x As New Manam_Updater.MUpdater
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
x.WhereToSave = My.Computer.FileSystem.SpecialDirectories.Desktop
x.Addlink("http://manam.noads.biz/downloads/Zip/Persian Gulf Date.rar")
p1.Controls.Add(x)
x.Dock = DockStyle.Top
x.StartDownload()

End Sub

Private Sub x_DownloadProgressChanged(ByVal percent As Integer) Handles x.DownloadProgressChanged
Me.Text = "Downloaded = " & percent & " %"
If percent = 100 Then
Me.Text = "File Complete downloaded"
End If
End Sub
End Class

موفق باشید .

ebrahimv
جمعه 02 مهر 1389, 22:56 عصر
- اگه لینک دانلودی در مسیری که برای ذخیره سازی لینک معین شده وجود داره به کاربر اعلام می کنه که آیا مایل هست فایل حذف بشه و دانلود شروع بشه یا نه



خيلي عاليه
ميشه اين كاري كه كرديد رو اختياري كنيد؟
يعني برنامه نويس تصميم بگيره كه از كاربر پرسيده بشه يا نه

alimanam
شنبه 03 مهر 1389, 00:38 صبح
با سلام

بله این ویژگی رو هم بهش اضافه کردم میتونین آخرین فایل + نمونه کد رو از اینجا (http://alimanam.persiangig.com/download/Manam-Updater.rar) دریافت کنید .