[ Goran Goran @ 02.03.2005. 21:21 ] @
Pozdrav,

Kako bi glasio kod koji samo provjeri da li postoji pojedini fajl na odredjenoj lokaciji?

Pr:

Ako postoji C:\Programs\Imenik.doc
msgbox «Imenik postoji»
ako ne
msgbox «Imenik ne postoji»
[ Not now, John! @ 02.03.2005. 21:25 ] @
Code:
Private Const MAX_PATH = 260

Private Type FileTime
   dwLowDateTime As Long
   dwHighDateTime As Long
End Type

Private Type WIN32_FIND_DATA
   dwFileAttributes As Long
   ftCreationTime As FileTime
   ftLastAccessTime As FileTime
   ftLastWriteTime As FileTime
   nFileSizeHigh As Long
   nFileSizeLow As Long
   dwReserved0 As Long
   dwReserved1 As Long
   cFileName As String * MAX_PATH
   cAlternate As String * 14
End Type

Private Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" (ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long
Private Declare Function FindClose Lib "kernel32" (ByVal hFindFile As Long) As Long


Public Function FileExists(fn As String) As Boolean
    Dim retval As Long, FindData As WIN32_FIND_DATA, retval2 As Long
    retval = FindFirstFile(fn, FindData)
    If retval <> -1 Then FileExists = True
    retval2 = FindClose(retval)
End Function
[ Goran Goran @ 02.03.2005. 21:36 ] @

Nisam se nadao ovako brzom odgovoru.

Bravo, svaka cast!


Usput, sad sam postavio jos jedno pitanje, pa eto... samo dodatno upucujem... pogledajte, pomozite...
[ y0y0 @ 03.03.2005. 00:47 ] @
moze i preko file system objecta

Code:
Private Sub Form_Load()
Dim Fso
Set Fso = CreateObject("Scripting.filesystemobject")

If Fso.FileExists("C:\text.txt") Then
 MsgBox "postoji"
Else
MsgBox "ne postoji"
End If

End Sub
[ Aleksandar Ružičić @ 03.03.2005. 12:46 ] @
ili najjednostavnije, sa ugradjenom Dir funkcijom:
Code:

Function Postoji(filename As String) As Boolean
    Postoji = (Len(Dir(filename))<>0)
End Function
'a koristi se ovako:
If Postoji("C:\Programs\Imenik.doc") Then
  MsgBox "Postoji."
Else
  MsgBox "Ne postoji."
End If

zar nije lakse? :p
a takodje mozes i proveravati da li neki folder postoji (sa malom izmenom):
Code:

Function PostojiDir(dirname As String) As Boolean
    PostojiDir = (Len(Dir(dirname, vbDirectory))<>0)
End Function
'a koristi se ovako:
If PostojiDir("C:\Programs\") Then
  MsgBox "Postoji."
Else
  MsgBox "Ne postoji."
End If


pozdrav!
[ Dark Icarus @ 03.03.2005. 16:35 ] @
Bravo krcko! Samo može funkcija da bude i malko jednostavnija.
Code:
Postoji = (Dir(filename)<>"")
[ Shadowed @ 03.03.2005. 16:44 ] @
Ma da. A ne moraju ni te zagrade (spoljne). Zapravo, ja to ne bih ni smestio u funkciju vec bih samo koristio Dir(filename)<>"" ;).
[ Aleksandar Ružičić @ 03.03.2005. 19:05 ] @
Citat:
Dark Icarus: Bravo krcko! Samo može funkcija da bude i malko jednostavnija.
Code:
Postoji = (Dir(filename)<>"")


da al je ona moja brza! :D

negde sam procitao da VB brze procesuje ovo:
Code:

 If Len(somestring)=0 Then

od ovoga:
Code:

 If somestring="" Then


:D
[ Aleksandar Ružičić @ 03.03.2005. 19:18 ] @
evo proguglah malo:
How NOT to optimize in VB
Optimize string handling in Visual Basic 6.0
dobro sad malo kad pogledah nije:
Code:

 If Len(somestring)=0 Then

vec
Code:

 If LenB(somestring)=0 Then

:D, dobro odavno sam ja ovo citao... :P
[ Dark Icarus @ 03.03.2005. 23:19 ] @
To su već detalji, LenB vraća bajt a šta ćeš ako je fajl zakopan ispod 20 podfoldera? Onda će ti LenB(Path) vratiti grešku (valjda).

Istina je da je brže raditi sa numeričkim operatorima, ali ne verujem da bi funkciju "Postoji" program pozivao 50x u sekundi, tako da možeš sebi da priuštiš ipak da dodaš malo čitljivosti u kod nauštrb brzine. Zar je bitno da li komparacija traje 10ms ili 50ms, ako se vrši samo jednom (npr. kada korisnik klikne na neko dugme).
[ Aleksandar Ružičić @ 04.03.2005. 19:08 ] @
da, mislim da si u pravu....