Test Foro de elhacker.net SMF 2.1

Programación => .NET (C#, VB.NET, ASP) => Programación General => Programación Visual Basic => Mensaje iniciado por: Elemental Code en 1 Febrero 2011, 22:28 PM

Título: mFileExists.bas [Tan rustico como se pueda :D]
Publicado por: Elemental Code en 1 Febrero 2011, 22:28 PM
Siguiendo con lo rustico aca les dejo este modulo para hacer una funcion que VB deberia haber tenido :P

Código (vb) [Seleccionar]
'---------------------------------------------------------------------------------------
' 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.
Título: Re: mFileExists.bas [Tan rustico como se pueda :D]
Publicado por: 79137913 en 1 Febrero 2011, 23:12 PM
HOLA!!!

Creo que la manera mas rustica y corta seria:

Código (vb) [Seleccionar]
Private Function F_Exist(sPath as string) As Boolean
    If Dir(sPath) <> "" then F_Exist = True
End Function


GRACIAS POR LEER!!!
Título: Re: mFileExists.bas [Tan rustico como se pueda :D]
Publicado por: LeandroA en 1 Febrero 2011, 23:16 PM
(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)


Título: Re: mFileExists.bas [Tan rustico como se pueda :D]
Publicado por: Elemental Code en 1 Febrero 2011, 23:41 PM
Copado falta la parte de Inline ASM y que tire rayos por los ojos  :rolleyes: :rolleyes:
Título: Re: mFileExists.bas [Tan rustico como se pueda :D]
Publicado por: Psyke1 en 2 Febrero 2011, 01:16 AM
La forma más rápida de hacerlo que encontrarás es la que usa LA. :silbar:
Aquí una forma más fea:

Código (vb) [Seleccionar]
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
Título: Re: mFileExists.bas [Tan rustico como se pueda :D]
Publicado por: Edu en 2 Febrero 2011, 01:30 AM
Que hizo la rana? jajaja
Título: Re: mFileExists.bas [Tan rustico como se pueda :D]
Publicado por: Karcrack en 2 Febrero 2011, 12:17 PM
Otra alternativa mas:
Código (vb) [Seleccionar]
'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
Título: Re: mFileExists.bas [Tan rustico como se pueda :D]
Publicado por: 79137913 en 3 Febrero 2011, 00:57 AM
HOLA!!!

Mmm, el Inline Asm te lo debo, pero tira rayos por los ojos XD

Código (vb) [Seleccionar]
'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!!!
Título: Re: mFileExists.bas [Tan rustico como se pueda :D]
Publicado por: Psyke1 en 3 Febrero 2011, 01:01 AM
Jajajjaja
Estás loco... :laugh:

DoEvents! :P
Título: Re: mFileExists.bas [Tan rustico como se pueda :D]
Publicado por: Elemental Code en 3 Febrero 2011, 03:34 AM
LOQUISIMO

FUNCIONA BOLUDO  ;D ;D ;D ;D


TIRA RAYITOS POR LOS OJOS!!!

Fantastico :D
Título: Re: mFileExists.bas [Tan rustico como se pueda :D]
Publicado por: raul338 en 3 Febrero 2011, 15:51 PM
(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)

Título: Re: mFileExists.bas [Tan rustico como se pueda :D]
Publicado por: Psyke1 en 3 Febrero 2011, 16:00 PM
Es verdad, faltas tú en la lista... ;)
Soprendentes resultados... :o

DoEvents! :P
Título: Re: mFileExists.bas [Tan rustico como se pueda :D]
Publicado por: 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!!!
Título: Re: mFileExists.bas [Tan rustico como se pueda :D]
Publicado por: Tokes en 3 Febrero 2011, 19:09 PM
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.
Título: Re: mFileExists.bas [Tan rustico como se pueda :D]
Publicado por: Psyke1 en 3 Febrero 2011, 21:02 PM
@79137913
Esos resultados me encajan más... :rolleyes:

DoEvents! :P
Título: Re: mFileExists.bas [Tan rustico como se pueda :D]
Publicado por: BlackZeroX en 4 Febrero 2011, 08:50 AM
.
:xD :laugh: lol ya todo lo toman como reto xP.

Dulces Lunas!¡.
Título: Re: mFileExists.bas [Tan rustico como se pueda :D]
Publicado por: Psyke1 en 4 Febrero 2011, 09:10 AM
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
Título: Re: mFileExists.bas [Tan rustico como se pueda :D]
Publicado por: Karcrack en 4 Febrero 2011, 11:23 AM
(http://images1.memegenerator.net/ImageMacro/4548304/Challenge-Accepted.jpg?imageSize=Large&generatorName=Barney-Stinson)

Código (vb) [Seleccionar]
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:
Título: Re: mFileExists.bas [Tan rustico como se pueda :D]
Publicado por: 79137913 en 4 Febrero 2011, 12:10 PM
HOLA!!!

Tabla actualizada   ::)

GRACIAS POR LEER!!!
Título: Re: mFileExists.bas [Tan rustico como se pueda :D]
Publicado por: Edu en 4 Febrero 2011, 15:08 PM
Que estan haciendo? donde se fijan la velocidad o q hacen? xD
Título: Re: mFileExists.bas [Tan rustico como se pueda :D]
Publicado por: 79137913 en 4 Febrero 2011, 17:44 PM
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!!!
Título: Re: mFileExists.bas [Tan rustico como se pueda :D]
Publicado por: Edu en 4 Febrero 2011, 18:33 PM
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:
Código (vb6) [Seleccionar]

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
Título: Re: mFileExists.bas [Tan rustico como se pueda :D]
Publicado por: raul338 en 4 Febrero 2011, 18:41 PM
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 :)

Código (vb) [Seleccionar]

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
Título: Re: mFileExists.bas [Tan rustico como se pueda :D]
Publicado por: 79137913 en 4 Febrero 2011, 18:50 PM
HOLA!!!

xD Se me paso lo de KarCrack. ahora lo vuelvo a subir... (link de arriba)

GRACIAS POR LEER!!!
Título: Re: mFileExists.bas [Tan rustico como se pueda :D]
Publicado por: LeandroA en 4 Febrero 2011, 19:03 PM
Cita de: Karcrack en  4 Febrero 2011, 11:23 AM
(http://2.bp.blogspot.com/_wFifB13iCao/TOv0do6RAEI/AAAAAAAABKI/S_ADJb0cgm4/s1600/trollface.jpg)

Código (vb) [Seleccionar]
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)
Título: Re: mFileExists.bas [Tan rustico como se pueda :D]
Publicado por: Edu en 4 Febrero 2011, 19:28 PM
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
Título: Re: mFileExists.bas [Tan rustico como se pueda :D]
Publicado por: raul338 en 4 Febrero 2011, 20:12 PM
Código (vb) [Seleccionar]

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)
Título: Re: mFileExists.bas [Tan rustico como se pueda :D]
Publicado por: Karcrack en 4 Febrero 2011, 20:58 PM
jajajajja LeandroA!! jajajaj Lo copaste como dirias tu :xD

raul338 :¬¬ Te odio!! :¬¬ :laugh: :laugh: :laugh:
Título: Re: mFileExists.bas [Tan rustico como se pueda :D]
Publicado por: 79137913 en 7 Febrero 2011, 12:59 PM
HOLA!!!

TABLA Y LINK ACTUALIZADOS!  ::)

GRACIAS POR LEER!!!
Título: Re: mFileExists.bas [Tan rustico como se pueda :D]
Publicado por: Psyke1 en 7 Febrero 2011, 13:29 PM
Código (vb) [Seleccionar]

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