PDA

View Full Version : تشخیص وجود یک فایل



xrezax
جمعه 19 اسفند 1390, 14:31 عصر
دوستان چطور تشخیص بدم که فایلی که توی startup فایلی بنام reza.lnk وجود داره یا نداره ؟؟؟؟
سورس بزارین ممنون میشم

Mr'Jamshidy
جمعه 19 اسفند 1390, 14:38 عصر
سه تا حالت داری

استفاده از File System Object
استفاده از توابع زیر


Declare Function MakeSureDirectoryPathExists Lib "imagehlp.dll" (ByVal lpPath As String) As Long
مثال:
Private Declare Function MakeSureDirectoryPathExists Lib "imagehlp.dll" (ByVal lpPath As String) As Long
Private Sub Form_Load()
'create the directory "c:\this\is\a\test\directory\", if it doesn't exist already
MakeSureDirectoryPathExists "c:\this\is\a\test\directory\"
End Sub

تابع دوم:
Declare Function PathFileExists Lib "shlwapi.dll" Alias "PathFileExistsA" (ByVal pszPath As String) As Long

مثال:
Private Const GCT_INVALID = &H0
Private Const GCT_LFNCHAR = &H1
Private Const GCT_SEPARATOR = &H8
Private Const GCT_SHORTCHAR = &H2
Private Const GCT_WILD = &H4
Private Declare Function PathFileExists Lib "shlwapi.dll" Alias "PathFileExistsA" (ByVal pszPath As String) As Long
Private Declare Function PathFindOnPath Lib "shlwapi.dll" Alias "PathFindOnPathA" (ByVal pszPath As String, ByVal ppszOtherDirs As String) As Boolean
Private Declare Function PathGetCharType Lib "shlwapi.dll" Alias "PathGetCharTypeA" (ByVal ch As Byte) As Long
Private Declare Function PathGetDriveNumber Lib "shlwapi.dll" Alias "PathGetDriveNumberA" (ByVal pszPath As String) As Long
Private Sub Form_Load()
Dim sSave As String, Ret As Long
'set the form's graphical omde to 'persistent'
Me.AutoRedraw = True
'determine whether the file exists
Me.Print "Does the file 'win.com' exist? " + CStr(CBool(PathFileExists("c:\windows\win.com")))
'is the file 'autoexec.bat located in one of the directories specified in the PATH environment variable?
Me.Print "Is the file 'autoexec.bat' located a PATH-directory? " + CStr(CBool(PathFindOnPath("win.com", vbNullString)))
'check whether a specified character can be used in a path
Select Case PathGetCharType(Asc("*"))
Case GCT_INVALID
sSave = "invalid"
Case GCT_LFNCHAR
sSave = "valid in a long file name"
Case GCT_SHORTCHAR
sSave = "valid in a short (8.3) file name"
Case GCT_WILD
sSave = "a wildcard character"
Case GCT_SEPARATOR
sSave = "a path separator"
End Select
Me.Print "The character '*' is " + sSave
'get the corresponding drive number of a file
Me.Print "The file is located on drive " + Chr$(65 + PathGetDriveNumber("e:\test.txt"))
End Sub

تابع سوم:
Declare Function SHFileExists Lib "shell32" Alias "#45" (ByVal szPath As String) As Long

مثال:
Private Declare Function SHFileExists Lib "shell32" Alias "#45" (ByVal szPath As String) As Long
Private Sub Form_Load()
MsgBox "Does the file exist?" + Str$(SHFileExists("c:\autoexec.bat"))
End Sub

استفاده از فرمان Dir خود ویبی

ho3ein.3ven
جمعه 19 اسفند 1390, 14:40 عصر
داداش با fso کار کنی خیلی خوبه . از تو refrence ها microsoft scripting run time رو اضافه کن. بعد یه متغیر از نوع filesystemobject تعریف کن

xrezax
جمعه 19 اسفند 1390, 14:45 عصر
اینکارارو کردم. اما بی فایده بود. reza.lnk رو تشخیص نمیده.
پروژه های وی بی بزارین ممنون میشم

Mr'Jamshidy
جمعه 19 اسفند 1390, 15:02 عصر
دوست عزیز برات مثال گزاشتم نیازی به سورس نیست

xrezax
جمعه 19 اسفند 1390, 15:03 عصر
تست کردم. کار ندادن. شما یه تست کن

Mr'Jamshidy
جمعه 19 اسفند 1390, 15:17 عصر
این یک مثال خیلی ساده با فرمان Dir خود ویبی هم برای فولدر هم برای فایل، فقط باید مسیرش رو خودت تغییر بدی:

Private Sub Form_Load()
'File
If Trim$(Dir$("C:\a.lnk")) = vbNullString Then
MsgBox "File Not Exist"
Else
MsgBox "File Exist"
End If

'Directory
If Trim$(Dir$("C:\Windows", vbDirectory)) = vbNullString Then
MsgBox "Directory Not Exist"
Else
MsgBox "Directory Exist"
End If
End Sub

xrezax
جمعه 19 اسفند 1390, 15:27 عصر
کار نمیکنه.
تست کنید ببینین فایل زیرو پیدا می کنه واستو ؟؟

C:\Users\Seven\Start Menu\Programs\Startup\1.lnk

Mr'Jamshidy
جمعه 19 اسفند 1390, 16:27 عصر
دوست عزیز من هر نمونه ای که میزارم 3 با تست میکنم مشکلی نداشته باشه

شاید مشکل شما بخاطر UAC ویندوز 7 باشه که کد جواب نمیده

شما برنامه رو در حالت Run as administrator اجرا کن نتیجه رو بگو

سید حمید حق پرست
جمعه 19 اسفند 1390, 17:34 عصر
سلام
برای من جواب داد سورس آقای جمشیدی مشکلی نداشت ( ویندوز سون هم دارم )

موفق باشید


یا علی (ع)

xrezax
جمعه 19 اسفند 1390, 18:21 عصر
کدومش؟؟؟؟
میشه سورسشو بزاری ؟؟؟
این فایلو تشخیص بده C:\Users\Seven\Start Menu\Programs\Startup\1.lnk

سید حمید حق پرست
جمعه 19 اسفند 1390, 19:50 عصر
با این کد:

این یک مثال خیلی ساده با فرمان Dir خود ویبی هم برای فولدر هم برای فایل، فقط باید مسیرش رو خودت تغییر بدی:

Private Sub Form_Load()
'File
If Trim$(Dir$("C:\a.lnk")) = vbNullString Then
MsgBox "File Not Exist"
Else
MsgBox "File Exist"
End If

'Directory
If Trim$(Dir$("C:\Windows", vbDirectory)) = vbNullString Then
MsgBox "Directory Not Exist"
Else
MsgBox "Directory Exist"
End If
End Sub

عکس :
83903
83904

موفق باشی


یا علی (ع)

xrezax
جمعه 19 اسفند 1390, 22:18 عصر
کار نمی کنه.
کمپایلش کن تست کن.

سید حمید حق پرست
جمعه 19 اسفند 1390, 22:36 عصر
کمپایل هم کردم . کار کرد :
83916

یا علی (ع)

setroyd
شنبه 20 اسفند 1390, 01:25 صبح
Private Const OF_EXIST As Long = &H4000
Private Const OFS_MAXPATHNAME As Long = 128
Private Const HFILE_ERROR As Long = -1

Private Type OFSTRUCT
cBytes As Byte
fFixedDisk As Byte
nErrCode As Integer
Reserved1 As Integer
Reserved2 As Integer
szPathName(OFS_MAXPATHNAME) As Byte
End Type

Private Declare Function OpenFile Lib "kernel32" (ByVal lpFileName As String, _
lpReOpenBuff As OFSTRUCT, ByVal wStyle As Long) As Long

Public Function FileExists(ByVal Fname As String) As Boolean

Dim lRetVal As Long
Dim OfSt As OFSTRUCT

lRetVal = OpenFile(Fname, OfSt, OF_EXIST)
If lRetVal <> HFILE_ERROR Then
FileExists = True
Else
FileExists = False
End If

End Function


Private Sub Form_Load()
MsgBox FileExists("C:\Test.txt") 'True :D
End Sub

با این هم میشه .

xrezax
شنبه 20 اسفند 1390, 23:17 عصر
کار نمیکنه .........
اینم سورس من که استفاده می کنم. تست کنین.


Private Sub Command1_Click()
On Error Resume Next
x$ = Environ("USERPROFILE")
If Trim$(Dir$(x$ + "\Start Menu\Programs\Startup\" & App.EXEName & ".lnk")) = vbNullString Then
MsgBox "Not Found"
Else
MsgBox "Found"
End If
End Sub

Mr'Jamshidy
شنبه 20 اسفند 1390, 23:41 عصر
کار نمیکنه .........
اینم سورس من که استفاده می کنم. تست کنین.


Private Sub Command1_Click()
On Error Resume Next
x$ = Environ("USERPROFILE")
If Trim$(Dir$(x$ + "\Start Menu\Programs\Startup\" & App.EXEName & ".lnk")) = vbNullString Then
MsgBox "Not Found"
Else
MsgBox "Found"
End If
End Sub

من میگم به احتمال 99% آدرسی که به کد میدی مشکل داره

کد رو این مدلی بزن ببین آدرسی که بر میگردونه درست هست یا نه

Private Sub Command1_Click()
On Error Resume Next
x$ = Environ("USERPROFILE")
MsgBox x$ + "\Start Menu\Programs\Startup\" & App.EXEName & ".lnk"
'If Trim$(Dir$(x$ + "\Start Menu\Programs\Startup\" & App.EXEName & ".lnk")) = vbNullString Then
'MsgBox "Not Found"
'Else
'MsgBox "Found"
'End If
End Sub


--ویرایش----------

آدرس پوشه Startup در ویندوز 7

برای کاربر خاص

C:\Users\User Name\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

برای همه کاربران

C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup

xrezax
شنبه 20 اسفند 1390, 23:51 عصر
آدرس مشكلي نداره؛ كد كار نميكنه

setroyd
یک شنبه 21 اسفند 1390, 12:06 عصر
امکان نداره پس مشکل از سیستم شماس یا کد نویسیت چون همش کار میکنه .

xrezax
یک شنبه 21 اسفند 1390, 12:17 عصر
شما کد منو تست کنید. می فهمین مشکل از کد هست.


Private Sub Command1_Click()
On Error Resume Next
x$ = Environ("USERPROFILE")
If Trim$(Dir$(x$ + "\Start Menu\Programs\Startup\" & App.EXEName & ".lnk")) = vbNullString Then
MsgBox "Not Found"
Else
MsgBox "Found"
End If
End Sub

Mr'Jamshidy
یک شنبه 21 اسفند 1390, 13:32 عصر
شما کد منو تست کنید. می فهمین مشکل از کد هست.

عینا کد شما رو کپی پیست کردم و نتیجه این شد

83996

سید حمید حق پرست
یک شنبه 21 اسفند 1390, 16:34 عصر
دوست عزیز اون فایلی که میخوای موجود بودنش را تشخیص دهید کنار برنامست؟

یا علی (ع)

SlowCode
یک شنبه 21 اسفند 1390, 17:03 عصر
دوست عزیز اون فایلی که میخوای موجود بودنش را تشخیص دهید کنار برنامست؟

یا علی (ع)

لطفا پست های اول رو بخونید، فایل ایشون توی پوشه Startup هست.

سید حمید حق پرست
یک شنبه 21 اسفند 1390, 17:09 عصر
لطفا پست های اول رو بخونید، فایل ایشون توی پوشه Startup هست.
گفتم شاید اون مسیر برای مثال باشه
اگه کنار برنامه هست این سورس زیر رو دانلود کنید
برای اون مسیر هم میتونید تغیراتی در کد بدهید

یه کد دیگر هم هست که برای تشخیص فایل کنار برنامست شاید بدردتون بخوره
کد :
If (Dir("Image4.jpg")) = "Image4.jpg" Then
Msgbox "mojod hast"
Else
Msgbox "mojod nist"
End if

موفق باشید


یا علی (ع)

xrezax
یک شنبه 21 اسفند 1390, 22:10 عصر
اولا مرسی از جواب های خوبتون.
اما متاسفانه هیچ کدوم جواب سوال من نبود.
من می خوام استارت آپو چک کنم. نه جفت برنامه یا درایو دیگه.

Veteran
یک شنبه 21 اسفند 1390, 22:25 عصر
میخواین پوشه استارت اپ رو چک کنید ؟

xrezax
دوشنبه 22 اسفند 1390, 00:25 صبح
می خوام ببینم این فایل lnk.1 توی استارت آپ هست یا نه

سید حمید حق پرست
دوشنبه 22 اسفند 1390, 00:41 صبح
فکر کنم شما میخواید ببینید که این فایل تو استارت آپ اگه بود که هیچ و اگه نبود دوباره برنامه اونو بزاره تو استارت آپ . درسته؟


یا علی (ع)

Mr'Jamshidy
دوشنبه 22 اسفند 1390, 07:31 صبح
اولا مرسی از جواب های خوبتون.
اما متاسفانه هیچ کدوم جواب سوال من نبود.
من می خوام استارت آپو چک کنم. نه جفت برنامه یا درایو دیگه.


میخواین پوشه استارت اپ رو چک کنید ؟

سلام

ببین دوست من تمام کد هایی که قرار داده شده به درستی کار میکنه
برات عکس هم گزاشتم

شما اگر میخوای ببینی 1.lnk تو استارت آپ هست یا نه چرا تو آدرس فایل از App.EXEName استفاده کردی؟
یک بار بهت گفتم اون آدرسی که میخوای ببینی هست یا نه رو اول تو مسیج باکس برای خودت نمایش بده

از این ایراد های لپی زیاد پیش میاد

الان آدرسی که برنامه شما چک میکنه C:\Users\ActiveUser\Start Menu\Programs\Startup\Project1.lnk

میبینی که کد شما دنبال فایل Project1.lnk میگرده نه 1.lnk
البته اون Project1.lnk در حالت دیباگ به نسبت نام پروژه تغییر میکنه و در حالت کامپایل شده به نسبت نام فایل اجرایی

کد های گزاشته شده رو لطفا دقیق تر بررسی کن

xrezax
دوشنبه 22 اسفند 1390, 09:27 صبح
می دونم دست عزیز. منم به اسم 1 ذخیرش می کنم بعد اجراش می کنم.
شاید مشکل از ویندوز من باشه
به هر حال از همه شما ممنونم :قلب:

Veteran
دوشنبه 22 اسفند 1390, 10:10 صبح
این کد رو چک کردم

x$ = Environ("USERPROFILE")
MsgBox x$ + "\Start Menu\Programs\Startup\" & App.EXEName & ".lnk"
اینو چرا استفاده کردی ؟
App.EXEName
؟
ادرس اشتباهی بر میگردونه :متفکر:
همچین ادرسی توی ویندوز 7 که اشتباه
تویه پوشه administrator
اره پوشه ای به اسم start up هست اما شما درسترسی نداری
من خودم با اکانت فول ادمین هم نتونستم باز کنم
حالا ویندوز شما xp هست با 7 ?
شما میتونی ادرس پوشه استارت اپ رو با اجرا این در ران به دست بیارین
shell:startup
ادرس رو نمیده پوشه استارت اپ رو باز میکنه
اما چجوری توی vb هم میشه اینرو اجرا کرد نمیدونم
:متفکر:

Mr'Jamshidy
دوشنبه 22 اسفند 1390, 12:16 عصر
این کد رو چک کردم

x$ = Environ("USERPROFILE")
MsgBox x$ + "\Start Menu\Programs\Startup\" & App.EXEName & ".lnk"
اینو چرا استفاده کردی ؟
App.EXEName
؟
ادرس اشتباهی بر میگردونه :متفکر:
همچین ادرسی توی ویندوز 7 که اشتباه
تویه پوشه administrator
اره پوشه ای به اسم start up هست اما شما درسترسی نداری
من خودم با اکانت فول ادمین هم نتونستم باز کنم
حالا ویندوز شما xp هست با 7 ?
شما میتونی ادرس پوشه استارت اپ رو با اجرا این در ران به دست بیارین
shell:startup
ادرس رو نمیده پوشه استارت اپ رو باز میکنه
اما چجوری توی vb هم میشه اینرو اجرا کرد نمیدونم
:متفکر:

این کد آدرس فولدر استارت آپ ویندوز XP رو بر میگردونه

ولی تو ویندوز 7 آدرس فولدر استارت آپ فرق میکنه

و نکته خیلی جالب اینجاست

داخل ویبی این کد در اجرا کنید

Private Sub Form_Load()
Dim StartupPath As String
StartupPath = Environ("USERPROFILE")
StartupPath = StartupPath & "\Start Menu\Programs\Startup\"

MsgBox "Startup Path: " & StartupPath

Shell "Explorer.exe " & StartupPath, vbNormalFocus
End Sub

فولدری که باز میشه توش یک شرت کات بسازید (البته این مسیر استارت آپ ویتدوز 7 نیست)

این مسیر رو چک کنید "Start Menu --> All Programs --> Startup"

تا به یک مساله جالب برخورد کنید (واسه من که خیلی جالب بود)

84047

تاکید میکنم حتما انجام بدید

setroyd
چهارشنبه 24 اسفند 1390, 19:50 عصر
بهترین راه همون api بود که من برات گذاشتم اون خوبه و سریع . من که گفتم شما تو کد نویسی اشتباه کردی !