Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: fary en 22 Abril 2010, 21:15 pm



Título: No me lee archivo
Publicado por: fary en 22 Abril 2010, 21:15 pm
Hola, tengo el siguiente problema, estoy intentando leer un mediante api pero nose porqeu demonios no me coje los datos, este es el code:

Código
  1. Option Explicit
  2.  
  3. Public Declare Function CreateFile Lib "kernel32.dll" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, lpSecurityAttributes As SECURITY_ATTRIBUTES, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
  4. Public Declare Function ReadFile Lib "kernel32.dll" (ByVal hFile As Long, ByRef lpBuffer As Any, ByVal nNumberOfBytesToRead As Long, ByRef lpNumberOfBytesRead As Long, ByRef lpOverlapped As Any) As Long
  5. Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
  6.  
  7.  
  8. Public Const GENERIC_READ = &H80000000
  9. Public Const FILE_SHARE_READ = &H1
  10. Public Const FILE_ATTRIBUTE_NORMAL = &H80
  11. Public Const OPEN_EXISTING As Long = 3
  12.  
  13. Public Type SECURITY_ATTRIBUTES
  14.    nLength As Long
  15.    lpSecurityDescriptor As Long
  16.    bInheritHandle As Long
  17. End Type
  18. Public Type OVERLAPPED
  19.    ternal As Long
  20.    ternalHigh As Long
  21.    offset As Long
  22.    OffsetHigh As Long
  23.    hEvent As Long
  24. End Type
  25.  
  26.  
  27. Public Function Archivo(ruta As String) As Boolean
  28.    Dim abrirarchivo As Long
  29.    Dim sa As SECURITY_ATTRIBUTES
  30.    Dim leerarchivo As Long
  31.    Dim over As OVERLAPPED
  32.    Dim buffer As String
  33.    Dim nada As Long
  34.    Dim bytesleidos As Long
  35.    abrirarchivo = CreateFile(ruta, GENERIC_READ, FILE_SHARE_READ, sa, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0)
  36.    buffer = Space(FileLen(ruta))
  37.    leerarchivo = ReadFile(abrirarchivo, buffer, nada, bytesleidos, over)
  38.    Call CloseHandle(abrirarchivo)
  39.    MsgBox buffer
  40. End Function
  41.  
  42. Sub Main()
  43.    Call Archivo("c:\feo.txt")
  44. End Sub

espero vuestra ayuda.

salu2!


Título: Re: No me lee archivo
Publicado por: Dr [F] en 22 Abril 2010, 21:25 pm
drinky.. para que complicarte la vida usando API .. ?'

acuerdate esto:

Mientras mas lineas tiene el programa mas pesa y mas bugs puede tner  :-\

Bye !


Título: Re: No me lee archivo
Publicado por: fary en 22 Abril 2010, 21:28 pm
drinky.. para que complicarte la vida usando API .. ?'

acuerdate esto:

Mientras mas lineas tiene el programa mas pesa y mas bugs puede tner  :-\

Bye !

hay que saber mas  opciones... si siempre tienes una unica salida habra veces que no te servira.

salu2!


Título: Re: No me lee archivo
Publicado por: PeterPunk77 en 23 Abril 2010, 09:56 am
En la llamada a la API ReadFile hay un par de errores:
- El buffer se lo tienes que pasar por valor.
- No le indicas el número de bytes que tiene que leer (tu variable nada, que no está inicializada)

Debería ser así:
Código
  1. leerarchivo = ReadFile(abrirarchivo, ByVal buffer, FileLen(ruta), bytesleidos, over)
o mejor aún:
Código
  1. Dim BytesALeer as Long
  2.  BytesALeer = FileLen(ruta)
  3.  buffer = Space(BytesALeer)
  4.  leerarchivo = ReadFile(abrirarchivo, ByVal buffer, BytesALeer, bytesleidos, ByVal over)

Saludos.


Título: Re: No me lee archivo
Publicado por: fary en 23 Abril 2010, 14:50 pm
Muchas gracias... me falto ese byval que fallo xD!

salu2!