C/Visual C - Archivos

 
Vista:

Archivos

Publicado por Federico (40 intervenciones) el 10/05/2006 21:25:21
Hola, antes que nada quiero aclarar qe este codigo es de vbasic, pero esta todo echo con la API, y en el foro de vbasic no me contestan por qe no tan a costumbrados a usar API,
la cuestion es qe tuve qe recurir a la API de archivos por qe la funcion PUT de vbasic no soporta archivos mas grandes de 2 GB. Ahora el problema qe tengo es qe no se porqe ReadFile siempre me lee el mismo fragmento de 4k del archivo, es como si no se moviera el puntero del archivo, siempre me lee los primeros 4k y por lo tanto entra en recursividad

'Declaraciones de la API sino me equivoco ustedes las tiene en la Window.h
Public Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, lpSecurityAttributes As Long, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
Public Declare Function GlobalAlloc Lib "kernel32" (ByVal wFlags As Long, ByVal dwBytes As Long) As Long
Public Declare Function GlobalFree Lib "kernel32" (ByVal hMem As Long) As Long
Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Public Declare Function ReadFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToRead As Long, lpNumberOfBytesRead As Long, lpOverlapped As Long) As Long
Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Public Declare Function WriteFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToWrite As Long, lpNumberOfBytesWritten As Long, lpOverlapped As Long) As Long

Public Const GENERIC_READ = &H80000000
Public Const FILE_SHARE_READ = &H1
Public Const OPEN_ALWAYS = 4
Public Const GMEM_FIXED = &H0
Public Const GMEM_ZEROINIT = &H40
Public Const FILE_APPEND_DATA = (&H4)
Public Const FILE_SHARE_WRITE = &H2

Dim H As Long
Dim Buffer As Long
Dim Success As Long
Dim Ret As Long
Dim s As String
H = CreateFile("c:\Exchange Server Setup Progress.log", GENERIC_READ, 0, Ret, OPEN_ALWAYS, 0, 0)
If H <> -1 Then
Do
Buffer = GlobalAlloc(GMEM_FIXED Or GMEM_ZEROINIT, 4096)
Success = ReadFile(H, ByVal Buffer, 4096, Ret, ByVal 0&)
If Ret And Success = 0 Then
Exit Do
End If
s = String$(4096, 0)
CopyMemory ByVal s, ByVal Buffer, 4096
'Hago algo con la info del archivo
GlobalFree Buffer
Loop
CloseHandle H
End If

Muchas Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder