PDA

View Full Version : چک کردن وجود داشتن فایل در سرور



niksalehi
پنج شنبه 12 اردیبهشت 1392, 10:57 صبح
سلام دوستان...
میخواستم ببینم چطوری میشه بفهمیم مثلا این فایل: www.google.com/1.jpg (http://www.google.com/1.txt) روی سایت وجود داره یا نه؟

مبین رنجبر
پنج شنبه 12 اردیبهشت 1392, 11:11 صبح
شما میتونید با استفاده از متد Shell دستور curl رو به صورت Hidden اجرا کنید :


Shell "cmd.exe curl www.google.com/1.jpg > C:\tmp.txt",vbHidden

این دستور خروجی رو در فایلی در درایو C شما با نام tmp.txt ذخیره میکند و شما تنها کافیست خط مربوط به عنوان صفحه که عبارت 404 Not Found هست رو بخونید.

niksalehi
پنج شنبه 12 اردیبهشت 1392, 14:23 عصر
ممنون، اما با استفاده از این کدی که دادین فقط cmd باز میشه، اتفاق دیگه ای نمیفته!

مبین رنجبر
پنج شنبه 12 اردیبهشت 1392, 14:29 عصر
ممنون، اما با استفاده از این کدی که دادین فقط cmd باز میشه، اتفاق دیگه ای نمیفته!

درایو C رو چک کنید ببینید فایل tmp.txt ساخته شده یا خیر

niksalehi
پنج شنبه 12 اردیبهشت 1392, 14:41 عصر
نه فایلی ساحته نشده، درایو هم عوض کردم و امتحان کردم، باز هم ساخته نشد!

مبین رنجبر
پنج شنبه 12 اردیبهشت 1392, 14:46 عصر
نه فایلی ساحته نشده، درایو هم عوض کردم و امتحان کردم، باز هم ساخته نشد!

خود کامندلاین رو باز کنید و دستور curl رو وارد کنید.ببینید این پیغام نمایش داده میشه یا خیر :


curl: try 'curl --help' for more information

niksalehi
پنج شنبه 12 اردیبهشت 1392, 14:53 عصر
این پیامو میده:

C:\Windows\system32>curl
'curl' is not recognized as an
operable program or batch file.

مبین رنجبر
پنج شنبه 12 اردیبهشت 1392, 15:01 عصر
این پیامو میده:

C:\Windows\system32>curl
'curl' is not recognized as an
operable program or batch file.

متاسفانه ابزار curl بر روی سیستمتون نصب نیست.راه حل اینه که curl رو نصب کنید و یا اینکه با استفاده از کامپوننت WinSock این کار رو انجام بدید.نمونه سورس زیر مثال خوبی از این کار هست :

http://static.daniweb.com/images/attachments/0/GetPage.zip

مهدی اسماعیلی
پنج شنبه 12 اردیبهشت 1392, 19:26 عصر
سلام،
از کامپوننت Microsoft Internet Transfer Control استفاده کنید . . .

تابع مورد استفاده :



Function DoesHTTPFileExist(ByVal URL As String) As Boolean
Dim HTTP As Inet
Dim S As String
Dim Exists As Boolean

Set HTTP = New Inet
With HTTP
.Protocol = icHTTP
.URL = URL
.Execute
Do While .StillExecuting
DoEvents
Loop
S = UCase(.GetHeader())
Exists = (InStr(1, S, "200 OK") > 0)
End With
Set HTTP = Nothing
DoesHTTPFileExist = Exists
End Function

اگر نتونستید باهاش کار کنید ، بگید تا نمونه برنامه بذارم

niksalehi
پنج شنبه 12 اردیبهشت 1392, 19:51 عصر
ممنون، اما موقع اجرا این خط رو ایراد میگیره:



Set HTTP = New Inet



Compile error:

Invalid use of New keyword

مهدی اسماعیلی
پنج شنبه 12 اردیبهشت 1392, 22:54 عصر
از همین Microsoft Internet Transfer Control استفاده کنید . . . MSINET.OCX
و از این کد :


Inet1.RequestTimeout = 20
MyText = Inet1.OpenURL("http://www.site.com/file.txt")
'or:
'MyText = Inet1.OpenURL("http://www.site.com/address")
If InStr(1, MyText, "404 Not Found") Then
MsgBox ("File not found")
Else
MsgBox ("File found")
End If

سورس و ocx را براتون پیوست کردم . . .

موفق باشید .../.

niksalehi
پنج شنبه 12 اردیبهشت 1392, 23:27 عصر
این واسه فایل های .jpg هم کار میده؟ والا واسه من time out میده!

مهدی اسماعیلی
جمعه 13 اردیبهشت 1392, 00:38 صبح
این واسه فایل های .jpg هم کار میده؟ والا واسه من time out میده! برای عکس ، خط دوم کد قبل را به این صورت اصلاح کنید :

MyText = Inet1.OpenURL("http://www.google.com/a.png", icString)

برای time out هم ، خط اول رو حذف کنید

راستی 404 Not Found در خط سوم اسم تایتل سایت هست در مواقعی که فایل پیدا نشده است . . .
توی هر سایتی که استفاده میکنید به این نکته دقت داشته باشید . . . .


در ضمن این تابع OpenURL برای چک کردن موجود بودن عکس خوب نیست !!! طول میکشد
حالا اگه چیز بهتر به ذهنم رسید و یا پیدا کردم بهتون میگم . . . من فکر کردم برای صفحات و فایل های دیگر میخواهید:لبخند: