Ayuda para migrar proyecto de VB6 a VS2008, se comparte el código que ya tengo

Lord Fragor

Bovino adolescente
#1
:chommy: Bobinos amigos, Tengo un proyecto que inicié en VB6 y ya tenía algo avanzado, pero en la compañía migraron a Visual Studio 2008 :histerica: y el programa no se compila correctamente en este entorno, alguna sugerencia o alternativa?

El programa lo que hace es buscar archivos tipo txt dentro de una ruta (y sus subcarpetas), se inserta por ejemplo

c:\Winbugs

El programa consigue las rutas individuales de los archivos...

c:\Winbugs\error.txt
c:\Winbugs\Maserrores\carpeta1\error1.txt
c:\Winbugs\Maserrores\carpeta1\error2.txt
c:\Winbugs\Maserrores\carpeta1\error3.txt
c:\Winbugs\Maserrores\carpeta2\error1.txt
c:\Winbugs\Maserrores\carpeta2\error2.txt
c:\Winbugs\yo\mellamo\diferente\error1.txt
c:\Winbugs\yo\mellamo\diferente\error2.txt
c:\Winbugs\yo\mellamo\diferente\error3.txt
etc...

Y entrega en un listbox o archivo de texto el resultado separando los documentos y asignándoles nombre por carpeta...

Error
*c:\Winbugs\error.txt
Maserrorescarpeta1
**c:\Winbugs\Maserrores\carpeta1\error1.txt
**c:\Winbugs\Maserrores\carpeta1\error2.txt
**c:\Winbugs\Maserrores\carpeta1\error3.txt
Maserrorescarpeta2
**c:\Winbugs\Maserrores\carpeta2\error1.txt
**c:\Winbugs\Maserrores\carpeta2\error2.txt
Yomellamodiferente
**c:\Winbugs\yo\mellamo\diferente\error1.txt
**c:\Winbugs\yo\mellamo\diferente\error2.txt
**c:\Winbugs\yo\mellamo\diferente\error3.txt

El formatito de * o ** lo hace para que otro programa (el que lee el archivo final), sepa si ese documento es de uno archivo (*) o de varios archivos (**) ya que los procesa diferente.

comparto el código que llevo en VB6 (comentado :aplausos:) por si a alguien mas le sirve, y agradeceré cualquier ayuda para migrarlo a 2008 u otra alternativa, ya que dentro de los controles que no me furulan en 2008 está el "WIN32_FIND_DATA"

Saludos y gracias

P.D.
aquí está el código en VB6

Se crea un módulo bas

'***************************************************************************
'* Código fuente del módulo bas
'***************************************************************************


Option Explicit On
Module Module1


'Declaraciones del Api
'------------------------------------------------------------------------------

'Esta función busca el primer archivo de un Dir
Private Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" ( _
ByVal lpFileName As String, _
ByVal lpFindFileData As Win32_find_data) As Long

'Esta el siguiente archivo o directorio
Private Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileA" ( _
ByVal hFindFile As Long, _
ByVal lpFindFileData As WIN32_FIND_DATA) As Long

Private Declare Function GetFileAttributes Lib "kernel32" Alias "GetFileAttributesA" ( _
ByVal lpFileName As String) As Long

'Esta cierra el Handle de búsqueda
Private Declare Function FindClose Lib "kernel32" (ByVal hFindFile As Long) As Long



End Module

----------------------------------------------

y en el Form1, se crean 2 textbox, un listbox y un botón

----------------------------------------------

Public Class Form1
' Constantes
'------------------------------------------------------------------------------

'Constantes de atributos de archivos
Const FILE_ATTRIBUTE_ARCHIVE = &H20
Const FILE_ATTRIBUTE_DIRECTORY = &H10
Const FILE_ATTRIBUTE_HIDDEN = &H2
Const FILE_ATTRIBUTE_NORMAL = &H80
Const FILE_ATTRIBUTE_READONLY = &H1
Const FILE_ATTRIBUTE_SYSTEM = &H4
Const FILE_ATTRIBUTE_TEMPORARY = &H100

'Otras constantes
Const MAX_PATH = 260
Const MAXDWORD = &HFFFF
Const INVALID_HANDLE_VALUE = -1


'UDT
'------------------------------------------------------------------------------

'Estructura para las fechas de los archivos
Private Type FILETIME
dwLowDateTime As Long
dwHighDateTime As Long
End Type

'Estructura necesaria para la información de archivos
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


'-----------------------------------------------------------------------
'Funciones
'-----------------------------------------------------------------------


'Esta función es para formatear los nombres de archivos y directorios. Elimina los CHR(0)
'------------------------------------------------------------------------
Function Eliminar_Nulos(ByVal OriginalStr As String) As String

If (InStr(OriginalStr, Chr(0)) > 0) Then
OriginalStr = Left(OriginalStr, InStr(OriginalStr, Chr(0)) - 1)
End If
Eliminar_Nulos = OriginalStr

End Function

'Esta función es la principal que permite buscar _
los archivos y listarlos en el ListBox


Function FindFilesAPI(ByVal Path As String, _
ByVal SearchStr As String, _
ByVal FileCount As Long, _
ByVal DirCount As Long, _
ByVal ListBox As ListBox)


Dim FileName As String
Dim DirName As String
Dim dirNames() As String
Dim nDir As Long
Dim i As Long
Dim hSearch As Long
Dim WFD As WIN32_FIND_DATA
Dim Cont As Long


If Right(Path, 1) <> "\" Then Path = Path & "\"
' Buscamos por mas directorios
nDir = 0
ReDim dirNames(nDir)
Cont = True
hSearch = FindFirstFile(Path & "*", WFD)
If hSearch <> INVALID_HANDLE_VALUE Then
Do While Cont
DirName = Eliminar_Nulos(WFD.cFileName)
' Ignore the current and encompassing directories.
If (DirName <> "." And (DirName <> ".." Then
' Check for directory with bitwise comparison.
If GetFileAttributes(Path & DirName) _
And FILE_ATTRIBUTE_DIRECTORY Then

dirNames(nDir) = DirName
DirCount = DirCount + 1
nDir = nDir + 1
ReDim Preserve dirNames(nDir)

End If
End If
Cont = FindNextFile(hSearch, WFD) 'Get next subdirectory.
Loop

Cont = FindClose(hSearch)

End If

hSearch = FindFirstFile(Path & SearchStr, WFD)
Cont = True
If hSearch <> INVALID_HANDLE_VALUE Then
While Cont
FileName = Eliminar_Nulos(WFD.cFileName)
If (FileName <> "." And (FileName <> ".." Then
FindFilesAPI = FindFilesAPI + (WFD.nFileSizeHigh * MAXDWORD) _
+ WFD.nFileSizeLow
FileCount = FileCount + 1
ListBox.AddItem(Path & FileName)
End If
Cont = FindNextFile(hSearch, WFD) ' Get next file
End While
Cont = FindClose(hSearch)
End If

' Si estos son Sub Directorios......
If nDir > 0 Then

For i = 0 To nDir - 1
FindFilesAPI = FindFilesAPI + FindFilesAPI(Path & dirNames(i) & "\", _
SearchStr, FileCount, DirCount, ListBox)
Next i
End If
End Function
End Class
 

XBunbury

Bovino maduro
#2
Busca informacion acerca de System.IO, ahi encontraras las estructuras necesarias, Directory y FileInfo, simplificas mucho el codigo con una funcion recursiva. funciones [getdirectory y getfiles]

Aprende a programar en .net no es dificil, pero hay que leer.
 
Arriba