PDA

View Full Version : مشکل این کد دریافت محتویات فایل txt از یک لینک



MSROTOK
جمعه 11 بهمن 1392, 06:22 صبح
سلام
من برای دریافت محتویات فایل txt از یک لینک از کد زیر استفاده میکنم.
مشکل این کد این هست که موقع دریافت برنامه برای چند ثانیه به حالت هنگ میره و اگر روی برنامه کلیک کنم هنگ کامل میکنه.
دوستان روش دیگه ای برای دریافت محتویات فایل txt از یک لینک دارید که این مشکل نداشته باشه؟
کد ماژول :
Private Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" (ByVal sAgent As String, ByVal lAccessType As Long, ByVal sProxyName As String, ByVal sProxyBypass As String, ByVal lFlags As Long) As Long
Private Declare Function InternetOpenUrl Lib "wininet.dll" Alias "InternetOpenUrlA" (ByVal hInternetSession As Long, ByVal sURL As String, ByVal sHeaders As String, ByVal lHeadersLength As Long, ByVal lFlags As Long, ByVal lContext As Long) As Long
Private Declare Function InternetReadFile Lib "wininet.dll" (ByVal hFile As Long, ByVal sBuffer As String, ByVal lNumBytesToRead As Long, lNumberOfBytesRead As Long) As Integer
Private Declare Function InternetCloseHandle Lib "wininet.dll" (ByVal hInet As Long) As Integer
Private Const IF_FROM_CACHE = &H1000000
Private Const IF_MAKE_PERSISTENT = &H2000000
Private Const IF_NO_CACHE_WRITE = &H4000000
Private Const BUFFER_LEN = 256
Public Function GetUrlSource(sURL As String) As String
Dim sBuffer As String * BUFFER_LEN, iResult As Integer, sData As String
Dim hInternet As Long, hSession As Long, lReturn As Long
hSession = InternetOpen("vb wininet", 1, vbNullString, vbNullString, 0)
If hSession Then hInternet = InternetOpenUrl(hSession, sURL, vbNullString, 0, IF_NO_CACHE_WRITE, 0)
If hInternet Then
iResult = InternetReadFile(hInternet, sBuffer, BUFFER_LEN, lReturn)
sData = sBuffer
Do While lReturn <> 0
iResult = InternetReadFile(hInternet, sBuffer, BUFFER_LEN, lReturn)
sData = sData + Mid(sBuffer, 1, lReturn)
Loop
End If
iResult = InternetCloseHandle(hInternet)
GetUrlSource = sData
End Function
کد استفاده :
Text1.Text = GetUrlSource("http://mysite.com/test.txt")
لطفا کمک کنید.

vbhamed
جمعه 11 بهمن 1392, 12:07 عصر
سلام
از منوي Project گزينه Component آيتم Microsoft Internet Transfer Control رو انتخاب كنيد و يه دونه روي فرم بزاريد
بعد كد زير
text1 = Inet1.OpenURL("http://www.test.com/file.txt")

MSROTOK
جمعه 11 بهمن 1392, 12:33 عصر
منون از پاسختون
اما کامپوننت inet بصورت پیشفرض در ویندوز نیست و این یک مشکل برای کاربرا هستش
روش دیگه ای نیست که یا از کامپوننت استفاده نشه یا اینکه کامپوننت در همه ویندوزها وجود داشته باشه؟
ممنون میشم کمک کنید خیلی نیاز دارم

vbhamed
جمعه 11 بهمن 1392, 12:54 عصر
سلام
در فايل ستاپتون كامپوننت رو قرار بدين يا اينكه كپي كنيد كنار برنامه و رجيسترش كنيد

MSROTOK
جمعه 11 بهمن 1392, 14:07 عصر
روش دیگه ای به جز inet نیست؟

Shahab.
جمعه 11 بهمن 1392, 15:38 عصر
چرا هست. میتونید از کنترل webbrowser استفاده کنید که در تمام ویندوزها وجود داره.
اول لینک رو در وب بروزر لود کنید و بعد سورس صفحه رو بخونید ( روش این کارم زیاد گفته شده )
اسم این کنترل در لیست کامپوننت ها : Microsoft Internet control

MSROTOK
شنبه 12 بهمن 1392, 07:34 صبح
با استفاده از webbrowser یک مشکل دارم اونم اینه که چون تعداد فایلها و دفعات خواندن زیاده در خواندنش مشکل پیش میاد چون برنامه باید صبر کنه تا فایل txt کامل لود بشه و بعد بخونه
یک روش دیگه با استفاده از URLDownloadToFile که فایل دانلود و سپس لود کنم اونم هنگام دانلود فایل باز برنامه تا پایان دانلود میره تو هنگ!
روش دیگه ای نیست؟ خیلی نیاز دارم بهش :ناراحت:

AbbasVB
شنبه 12 بهمن 1392, 10:47 صبح
سلام
روش دیگه ای هم هست با استفاده از کلاس و ماژول.
از پروژه ی زیر استفاده کنید

gachboy
شنبه 12 بهمن 1392, 18:27 عصر
عباس جان سورس دانلود کردم ولی برای ارسال و دریافت هدر متوجه نشدم چجوری باید استفاده کنم

AbbasVB
شنبه 12 بهمن 1392, 19:32 عصر
سلام
شما دقیقا می خواهید چه کار کنید
برای دانلود فایل که گفتم از این پروژه استفاده کنید
و اما کد خودتون که در پست1 قرار دادید با قرار دادن یک DoEvents در حلقه احتمالا مشکلش حل می شه
و اما برای ارسال هدر یه جستجو بزنید از ارسال هدر داخل همین سایت نمونه های خوبی پیدا می کنید.

gachboy
یک شنبه 13 بهمن 1392, 12:19 عصر
پست اول من نزاشتم...
می خوام با استفاده از این ماژول و کلاس هدر ارسال و دریافت کنم اگه میشه خودتون برای ارسال و دریافت هدر ساده یک مثال ساده بزنید.ممنون

atrinsoft
شنبه 21 شهریور 1394, 18:25 عصر
سلام
روش دیگه ای هم هست با استفاده از کلاس و ماژول.
از پروژه ی زیر استفاده کنید

چرا وقتی می خواهم کدی در این برنامه اضاف کنم آنتی ویروس بهش گیر می ده ولی در حالتی که چیزی بهش اضاف نمی کنم گیر نمیده مثلا این رو بهش اضاف کردم و گیر داد
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long