Siguiendo con lo rustico aca les dejo este modulo para hacer una funcion que VB deberia haber tenido :P
'---------------------------------------------------------------------------------------
' Module : mFileExists
' Author : Elemental Code
' Date : 01/02/2011
' Purpose : Check if a file exists in the most rustic way
'---------------------------------------------------------------------------------------
Option Explicit
Dim attr As VbFileAttribute
Public Function FileExists(ByVal sPath As String) As Boolean
On Error GoTo Missing
attr = GetAttr(sPath)
FileExists = True
Exit Function
Missing:
FileExists = False
End Function
Esta es la version estupida, facil y rustica de averiguar si un archivo existe.
Posiblemente haya aproximadamente 15.000 formas mejores pero esta funciona y la arme yo de guapo que soy.
Ademas uso esto como palanca para que un programador capo (Ejem Karcrack, Cobein, Seba123neo, BlackZeroX, Mr.Frog, LeandroA) se jueguen y saquen una version super rapida, con inline de ASM y que tire rayos por los ojos :D
Saludos.
HOLA!!!
Creo que la manera mas rustica y corta seria:
Private Function F_Exist(sPath as string) As Boolean
If Dir(sPath) <> "" then F_Exist = True
End Function
GRACIAS POR LEER!!!
(http://t1.gstatic.com/images?q=tbn:ANd9GcSRbHkNdKp1AFxEEzC35tP_g65UMjYXSGpAusWyM9d3i6TokT2DdA)
Private Declare Function GetFileAttributes Lib "kernel32" Alias "GetFileAttributesA" (ByVal lpFileName As String) As Long
CBool(GetFileAttributes(sPath) <> -1)
Copado falta la parte de Inline ASM y que tire rayos por los ojos :rolleyes: :rolleyes:
La forma más rápida de hacerlo que encontrarás es la que usa LA. :silbar:
Aquí una forma más fea:
Option Explicit
Private Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" (ByVal lpFilename As String, lpFindFileData As WIN32_FIND_DATA) As Long
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 * 260
cAlternate As String * 14
End Type
Private myWFD As WIN32_FIND_DATA
Public Function MrFrogFileExists(ByRef strFileName As String) As Boolean
MrFrogFileExists = Not (FindFirstFile(strFileName, myWFD) = -1)
End Function
DoEvents! :P
Que hizo la rana? jajaja
Otra alternativa mas:
'KERNEL32
Private Declare Function OpenFile Lib "KERNEL32" (ByVal lpFileName As String, ByRef lpReOpenBuff As Any, ByVal wStyle As Long) As Long
Private Function DoFileExists(ByVal sPath As String) As Boolean
Dim OFSTRUCT(&H21) As Long
DoFileExists = CBool(OpenFile(sPath, OFSTRUCT(0), &H4000) <> -1)
End Function
MOD:La ruta tiene una limitación de 128 caracteres... Problema de usar funciones diseñadas para 16bits :xD
HOLA!!!
Mmm, el Inline Asm te lo debo, pero tira rayos por los ojos XD
'armen un form con:
' 2 shapes
' 2 lines
' 1 timer
' y denle a f5
Private Function F_Exist(sPath As String) As Boolean
If Dir(sPath) <> "" Then F_Exist = True
End Function
Private Sub Form_Load()
Me.ScaleMode = vbPixels
Me.ScaleHeight = 600
Me.ScaleWidth = 800
Shape1.Top = Me.ScaleHeight / 2 - 200
Shape2.Top = Me.ScaleHeight / 2 - 200
Shape1.Left = Me.ScaleWidth / 2 - 150
Shape2.Left = Me.ScaleWidth / 2 + 150
Shape1.Shape = 2
Shape2.Shape = 2
Shape1.Width = 150
Shape2.Width = 150
Shape1.Height = 300
Shape2.Height = 300
Line1.BorderColor = &HFF&
Line2.BorderColor = &HFF&
Line1.X1 = Shape1.Left + Shape1.Width / 2
Line1.Y1 = Shape1.Top + Shape1.Height / 2
Line2.X1 = Shape2.Left + Shape2.Width / 2
Line2.Y1 = Shape2.Top + Shape2.Height / 2
Timer1.Interval = 100
End Sub
Private Sub Timer1_Timer()
Randomize
neg = 1
If Rnd() * 2 > 1 Then neg = -1
Line1.X2 = Shape1.Left + Shape1.Width / 2 + Rnd() * 300 * neg
neg = 1
If Rnd() * 2 > 1 Then neg = -1
Line1.Y2 = Shape1.Top + Shape1.Height / 2 + Rnd() * 300 * neg
neg = 1
If Rnd() * 2 > 1 Then neg = -1
Line2.X2 = Shape2.Left + Shape2.Width / 2 + Rnd() * 300 * neg
neg = 1
If Rnd() * 2 > 1 Then neg = -1
Line2.Y2 = Shape2.Top + Shape2.Height / 2 + Rnd() * 300 * neg
Debug.Print F_Exist("c:\hola.txt")
End Sub
GRACIAS POR LEER!!!
Jajajjaja
Estás loco... :laugh:
DoEvents! :P
LOQUISIMO
FUNCIONA BOLUDO ;D ;D ;D ;D
TIRA RAYITOS POR LOS OJOS!!!
Fantastico :D
(http://img217.imageshack.us/img217/3940/pokerfaces.png)
y porque no estoy en la lista? :xD
Por ahora los resultados :P
(http://i51.tinypic.com/2r2vr0y.jpg)
Es verdad, faltas tú en la lista... ;)
Soprendentes resultados... :o
DoEvents! :P
HOLA!!!
1)ACTUALIZADO CON LA FUNCION DE Tokes
2)ACTUALIZADO CON LA NUEVA VERSION DE KarCrack
3)ACTUALIZADO CON LA FUNCION MODIFICADA DE Raul (de la de KarCrack)
4)AMPLIADO EL BUCLE A 2000 VUELTAS
5)AGREGADA LA FUNCION MODIFICADA DE Mr.Frog (de la de Raul de la de KarCrak)
La tabla (como la de Raul):
"*****TEST HECHO POR 79137913******"
**PRUEBA CON ARCHIVO QUE SI EXISTE**
7913: 37,008 msec
LeaA: 10,142 msec
E__C: 11,866 msec
Frog: 30,928 msec
KarC: 9,092 msec
Toke: 46,173 msec
Raul: 8,828 msec Mod de la de KarCrack
Frg2: 8,795 msec Mod del mod de Raul
**PRUEBA CON ARCHIVO QUE NO EXISTE**
7913: 32,126 msec
LeaA: 14,285 msec
E__C: 23,763 msec
Frog: 30,927 msec
KarC: 13,112 msec
Toke: 41,872 msec
Raul: 12,836 msec Mod de la de KarCrack
Frg2: 12,700 msec Mod del mod de Raul
GRACIAS POR LEER!!!
Bueno, aquí pongo otra forma de hacerlo. No sé si funcione para todas las clases de archivos, pero de igual forma lo dejo.
Private Function Existe(nombre As String) As Boolean
On Error Resume Next
Open nombre For Input As #1
If Err.Number Then Exit Function
Close #1
Existe = True
End Function
Saludos a todos.
@79137913
Esos resultados me encajan más... :rolleyes:
DoEvents! :P
.
:xD :laugh: lol ya todo lo toman como reto xP.
Dulces Lunas!¡.
Jajajajjajajajja :laugh:
Yo personalmente no :xD
Todas las formas que ponemos están más vistas que yo que sé... :rolleyes:
Lo que si me interesaba era la manera mas rápida de hacerlo... :P
DoEvents! :P
(http://images1.memegenerator.net/ImageMacro/4548304/Challenge-Accepted.jpg?imageSize=Large&generatorName=Barney-Stinson)
Option Explicit
'KERNEL32
Private Declare Function GetFileAttributesW Lib "KERNEL32" (ByVal lpFileName As Long) As Long
Public Function DoFileExists(ByRef sPath As String) As Boolean
DoFileExists = CBool(GetFileAttributesW(StrPtr(sPath)) <> -1)
End Function
:rolleyes: Y su no supera a la de Leandro me avisais y le meto un TLB o me paso a NT... porque de ASM olvidaros :laugh: :laugh: :silbar:
HOLA!!!
Tabla actualizada ::)
GRACIAS POR LEER!!!
Que estan haciendo? donde se fijan la velocidad o q hacen? xD
HOLA!!!
La velocidad CTiming.cls pruebo todas las funciones con un bucle de 2000 vueltas C/U.
El Proyecto:
http://www.mediafire.com/?216807hihkz79sb
GRACIAS POR LEER!!!
Unas preguntas, perdonen si me voy del tema..
Porque 200 vueltas?
Para usarlo tengo que cambiar todo el main solamente entonces?
Porque pusiste esto en el proyecto:
Private Function KarCrackDoFileExists(ByVal sPath As String) As Boolean
DoFileExists = CBool(GetFileAttributesW(StrPtr(sPath)) <> -1)
End Function
Se puede hacer eso? se llama KarCrackDoFileExists la funcion y usas el DoFileExists para devolver el valor
Lo tomo como reto porque le da un poquito de picante al tema :xD
Porque 200 vueltas? porque si compruebas un solo archivo lo hace tan rapido que ni nos damos cuenta. En otros retos sirve :)
Para usarlo tengo que cambiar todo el main solamente entonces? no solo copiar la funcion y llamarla :)
Sub Main
Msgbox KarCrackDoFileExists("C:\autoexe.bat")
End Sub
Private Function KarCrackDoFileExists(ByVal sPath As String) As Boolean
' Tiene que tener el mismo nombre
KarCrackDoFileExists= CBool(GetFileAttributesW(StrPtr(sPath)) <> -1)
End Function
HOLA!!!
xD Se me paso lo de KarCrack. ahora lo vuelvo a subir... (link de arriba)
GRACIAS POR LEER!!!
Cita de: Karcrack en 4 Febrero 2011, 11:23 AM
(http://2.bp.blogspot.com/_wFifB13iCao/TOv0do6RAEI/AAAAAAAABKI/S_ADJb0cgm4/s1600/trollface.jpg)
Option Explicit
'KERNEL32
Private Declare Function GetFileAttributesW Lib "KERNEL32" (ByVal lpFileName As Long) As Long
Public Function DoFileExists(ByRef sPath As String) As Boolean
DoFileExists = CBool(GetFileAttributesW(StrPtr(sPath)) <> -1)
End Function
:rolleyes: Y su no supera a la de Leandro me avisais y le meto un TLB o me paso a NT... porque de ASM olvidaros :laugh: :laugh: :silbar:
Cita de: LeandroA
(http://2.bp.blogspot.com/_beL4XQLgBc8/TFrDprf_W3I/AAAAAAAAAcM/yD872DxD4rk/s400/fuuu+comic+fuuu.jpg)
En realidad pregunte lo de la funcion de Karcrack porq talvez al cambiarla no son los mismos datos q da.
Y gracias por contestar profe xD
Private Declare Function GetFileAttributesW Lib "KERNEL32" (ByVal lpFileName As Long) As Long
' LeandroA mod Karcrack mod Raul338 xD
Public Function DoFileExistsR(sPath As String) As Boolean
DoFileExistsR = GetFileAttributesW(StrPtr(sPath)) <> -1
End Function
DirectCast FTW!
(http://img141.imageshack.us/img141/3316/capturazy.png)
jajajajja LeandroA!! jajajaj Lo copaste como dirias tu :xD
raul338 :¬¬ Te odio!! :¬¬ :laugh: :laugh: :laugh:
HOLA!!!
TABLA Y LINK ACTUALIZADOS! ::)
GRACIAS POR LEER!!!
Option Explicit
Private Declare Function GetFileAttributesW Lib "KERNEL32" (ByVal lpFileName As Long) As Long
' LeandroA mod Karcrack mod Raul338 mod Mr.Frog
Public Static Function DoFileExistsRII(ByRef sPath As String) As Boolean
DoFileExistsRII = (GetFileAttributesW(StrPtr(sPath)) > -1)
End Function
Cita de: 79137913 en 3 Febrero 2011, 17:13 PM
HOLA!!!
1)ACTUALIZADO CON LA FUNCION DE Tokes
2)ACTUALIZADO CON LA NUEVA VERSION DE KarCrack
3)ACTUALIZADO CON LA FUNCION MODIFICADA DE Raul (de la de KarCrack)
4)AMPLIADO EL BUCLE A 2000 VUELTAS
5)AGREGADA LA FUNCION MODIFICADA DE Mr.Frog (de la de Raul de la de KarCrak)
La tabla (como la de Raul):
"*****TEST HECHO POR 79137913******"
**PRUEBA CON ARCHIVO QUE SI EXISTE**
7913: 37,008 msec
LeaA: 10,142 msec
E__C: 11,866 msec
Frog: 30,928 msec
KarC: 9,092 msec
Toke: 46,173 msec
Raul: 8,828 msec Mod de la de KarCrack
Frg2: 8,795 msec Mod del mod de Raul
**PRUEBA CON ARCHIVO QUE NO EXISTE**
7913: 32,126 msec
LeaA: 14,285 msec
E__C: 23,763 msec
Frog: 30,927 msec
KarC: 13,112 msec
Toke: 41,872 msec
Raul: 12,836 msec Mod de la de KarCrack
Frg2: 12,700 msec Mod del mod de Raul
GRACIAS POR LEER!!!
(http://images2.memegenerator.net/ImageMacro/3898169/fuck-yeah.jpg?imageSize=Medium&generatorName=Fuck-Yeah)
DoEvents! :P