Problema al escanear y salvar directorios y archivos.

Iniciado por Fobia, 6 Agosto 2006, 12:20 PM

0 Miembros y 3 Visitantes están viendo este tema.

Fobia

Hola,
tengo un problema al escribir un codigo y estoy completamente atascado y no se por donde salir, a ver si se os ocurre como hacerlo a alguno/a.

Necesito hacer un programa que escanee todas las unidades de un ordenador en busca de directorios y archivos, y luego me los guarde en un archivo de texto (todos los archivos y directorios), y si fuera posible que compare los nombres de ciertos archivos con unos que irian introducido en text/listbox (esto ultimo es algo secundario).

Gracias de antemano a todos.

Grimble Grumble

Postea el codigo para ver donde te 'atascaste'

Saludos !
A gnome named Grimble Grumble
And little gnomes stay in their homes
Eating, sleeping, drinking their wine...

Fobia

#2
he probado bastantes cosas y ninguna me funciona... por eso prefiero que me pongais el codigo entero, ya que estoy empezando con esto y quiero aprender sobre codigos bien exo desde el principio :P

de todas formas los codigos que use eran modificaciones de codigos base que habia encontrado por internet pero no consigo hacerlos funcionar como yo quiero :S



el codigo base que utilice era este:

'Program released to the Public Domain by Tim Gerchmez
'24 April, 1997

'Clear lists

List1.Clear
List2.Clear


'Set path to starting directory

Dir1.Path = Left$(Drive1.Drive, 2) + "\"
Dir1.Refresh

File1.Path = Dir1.Path  'Set file path
File1.Refresh


'Add files in starting directory to catalog

For t& = 0 To File1.ListCount - 1
    If Right$(Dir1.Path, 1) <> "\" Then 'Starting in other than root directory of drive
        List2.AddItem Dir1.Path + "\" + File1.List(t&)
    Else
        List2.AddItem Dir1.Path + File1.List(t&) 'Starting in root directory of drive
    End If
Next


'Add initial subdirectories in starting directory
For t& = 0 To Dir1.ListCount - 1
    List1.AddItem Dir1.List(t&)
Next

If t& = 0 Then GoTo finishedpoint 'No subdirectories, we're done.


cnt& = 0  'Start with first directory in list

startpoint:

Dir1.Path = List1.List(cnt&)
File1.Path = Dir1.Path

'Add any subdirectories found

For t& = 0 To Dir1.ListCount - 1
    List1.AddItem Dir1.List(t&)
Next


'Now add files found...
For t& = 0 To File1.ListCount - 1
    List2.AddItem Dir1.Path + "\" + File1.List(t&)
Next

'Increment count
cnt& = cnt& + 1
If cnt& < List1.ListCount Then GoTo startpoint


finishedpoint:

Label1.Caption = "Total:" + Str$(List2.ListCount)

Hans el Topo

un poco jodido de leer en marquesina eh!!

lo que tienes que hacer es listar todas las unidades, luego vas recorriendodas (tienes que tener el control de errores para cuando te de error los lectores de cds/dvds y disquetes), con ese listado haces un bucle y vas recorriendo los directorios, que a su vez hará uno u otro bucle dependiendo de si es archivo o directorio (lo haces con procedimientos claro esta) y los vas añadiendo a un listbox ordenado si asi lo quieres y listo...


si te ocurre algun percance o algo pregunta
 

Fobia

#4
eso ya lo conseguia con este codigo...

el programa me listaba todos los directorios y archivos en un listbox...

mi problema es que necesito que lo que sale en el listbox se guarde en un .txt y no se como hacerlo.

Como ya dije soy un principiante en esto y quiero ver un codigo bien exo y que se realice lo que yo estoy intentando hacer para ver en que fallaba.

Me recomendaron que buscase codigos e intentase adaptarlos a lo que yo queria hacer pero de cada manera que he ido intentando ha sido peor que la anterior :S

Hans el Topo

pues lo pasas de la list al archivo...

http://foro.elhacker.net/index.php/topic,116723.0.html

el botoncito del foro donde pone buscar esta a tu alcance...
 

Fobia

eso lo intente y me parece que no me salio por haberlo exo mal asi que aprobecho y pregunto....


Open "C:\Archivo.txt" for Append as #1
Printf #1, "Lo que le vas a meter al archivo"
Close #1


Donde dice lo que vas a meter al archivo solo tendria que poner el nombre de la lista?

Hans el Topo

Cita de: Fobia en  6 Agosto 2006, 13:52 PM
eso lo intente y me parece que no me salio por haberlo exo mal asi que aprobecho y pregunto....


Open "C:\Archivo.txt" for Append as #1
Printf #1, "Lo que le vas a meter al archivo"
Close #1


Donde dice lo que vas a meter al archivo solo tendria que poner el nombre de la lista?


puedes meter todo de golpe... y te ahorras el estar trabajado con el archivo
 

Fobia

Bueno yo no soy capaz de hacerlo, si alguien pudiera ponerme el codigo exacto le estaria muy agradecido.

Hans el Topo

Cita de: Fobia en  6 Agosto 2006, 16:29 PM
Bueno yo no soy capaz de hacerlo, si alguien pudiera ponerme el codigo exacto le estaria muy agradecido.

tienes e opciones, o en vez de guardarlo en el list lo guardas en una cadena...  cadena=cadena & vbnewline & laruta
o recorres el list una vez terminado el proceso de llenarlo y lo vas añadiendo a una cadena tambien o lo vas añadiendo directamente al fichero

respecto a utilizar archivos...


OPEN

Activa operaciones de entrada/salida (E/S) con un archivo.

Sintaxis

Open rutaacceso [For modo] [Access acceso] [bloquear] As [#]númeroarchivo [Len=longitudregistro]

La sintaxis de la instrucción Open consta las siguientes partes:

Parte Descripción
rutaacceso Requerido.Expresión de cadena que especifica un nombre de archivo; puede incluir el directorio o carpeta y la unidad de disco.
modo Requerido.Palabra clave que especifica el modo de archivo: Append, Binary, Input, Output o Random. Si no se especifica, el archivo se abre con acceso Random.
acceso Opcional. Palabra clave que especifica las operaciones permitidas en el archivo abierto: Read, Write o Read Write.
bloquear Opcional. Palabra clave que especifica las operaciones permitidas en el archivo abierto por otros procesos: Shared, Lock Read, Lock Write y Lock Read Write.
númeroarchivo Requerido. Unnúmero de archivo válido entre 1 y 511 inclusive. Para obtener el número del siguiente archivo disponible se utiliza la función FreeFile.
longitudregistro Opcional. Número igual o inferior a 32.767 bytes. En archivos abiertos para acceso aleatorio, este valor es la longitud del registro. Para archivos secuenciales, este valor es el número de caracteres almacenados en búfer.


Comentarios

Antes de poder ejecutar una operación de E/S en un archivo, éste debe estar abierto. Open asigna un búfer para operaciones de E/S con el archivo y determina el modo de acceso que se debe utilizar con el búfer.

Si el archivo especificado con rutaacceso no existe, se crea al abrir un archivo en los modos Append, Binary, Output o Random.

Si el archivo ya lo ha abierto otro proceso y no se permite el tipo de acceso especificado, la operación Open fracasa y se produce un error.

La cláusula Len se ignora si modo es Binary.

Importante   En los modos Binary, Input y Random se puede abrir un archivo utilizando un número de archivo distinto sin necesidad de cerrarlo antes. En los modos Append y Output debe cerrar el archivo para poder abrirlo con un número de archivo distinto.


Aqui viene tu fallo no es printf es print

PRINT

Escribe en un archivo secuencial los datos con formato de presentación.

Sintaxis

Print #númeroarchivo, [listasalida]

La sintaxis de la instrucción Print # consta las siguientes partes:

Parte Descripción
númeroarchivo Requerido. Cualquiernúmero de archivo válido.
listasalida Opcional.Expresión o lista de expresiones para imprimir.


Valor

Elargumento listasalida tiene los valores siguientes:

[{Spc(n) | Tab[(n)]}][expresión][posicióncarácter]

Parte Descripción
Spc(n) Se utiliza para insertar caracteres de espacio en la salida, donde n es el número de caracteres de espacio para insertar.
Tab(n) Se utiliza para colocar el punto de inserción en una número de columna absoluta, donde n es el número de columna. Utilice Tab sin argumentos para colocar el punto de inserción al comienzo de la siguientezona de impresión.
expresión Expresión numérica oexpresión de cadena que se va a imprimir.
posicióncarácter Especifica el punto de inserción del carácter siguiente. Se utiliza un punto y coma (;) para especificar que el punto de inserción debe estar inmediatamente después del último carácter mostrado. Utilice Tab(n) para colocar el punto de inserción en un número de columna absoluta. Utilice Tab sin argumentos para colocar el punto de inserción al comienzo de la siguiente zona de impresión. Si se omite posicióncarácter, el siguiente carácter se imprime en la línea siguiente.


Comentarios

Los datos que se escriben en un archivo con Print # se leen normalmente con Line Input # o Input.

Si omite listasalida y sólo incluye un separador de listas después de númeroarchivo, se imprime una línea en blanco en el archivo. Se pueden separar varias expresiones por medio de un espacio en blanco o de un punto y coma.

En el caso de datos de tipoBoolean se imprime True o False. Las palabras clave True y False no se traducen, cualquiera que sea laconfiguración regional.

Los datos de tipoDate se escriben en el archivo utilizando el formato corto de fecha estándar reconocido por el sistema. Cuando no se pone el componente correspondiente a la fecha o a la hora, o éste es igual a cero, sólo se escribe en el archivo la parte suministrada.

No se escribe nada en el archivo si los datos de listasalida son de tipoEmpty. Sin embargo, si listasalida esNull, Null se escribe en el archivo.

Para datos de Error, la salida aparece como Error códigoerror. La palabra clave Error no se traducen, cualquiera que sea la configuración regional.

Todos los datos que se escriben en el archivo con Print # se adaptan regionalmente; es decir, se da formato al dato usando el separador decimal adecuado.

Puesto que Print # escribe una imagen de los datos en el archivo, debe delimitar los datos para que se impriman correctamente. Si utiliza Tab sin argumentos para mover la posición de impresión a la siguiente zona de impresión, Print # también escribe en el archivo los espacios entre campos de impresión.

Nota   Si en el futuro desea leer datos de un archivo por medio de la instrucción Input #, utilice la instrucción Write # en vez de la instrucción Print # para escribir los datos en el archivo. La utilización de Write # asegura la integridad de cada campo de datos separado, al delimitarlo adecuadamente, de modo que se pueda leer otra vez utilizando Input #. La utilización de Write # asegura también que los datos se puedan leer correctamente en cualquier configuración regional.



CLOSE

Termina las operaciones de entrada/salida (E/S) en un archivo abierto con la instrucción Open.

Sintaxis

Close [listanúmerosarchivos]

Elargumento opcional listanúmerosarchivos puede estar constituido por uno o másnúmeros de archivo usando la siguiente sintaxis, donde númeroarchivo es cualquier número de archivo válido:

[[#]númeroarchivo] [, [#]númeroarchivo] . . .

Comentarios

Si omite listanúmerosarchivos, se cierran todos los archivos activos abiertos con la instrucción Open.

Cuando se cierran archivos que se abrieron para Output o Append, el búfer final de salida se graba en el búfer del sistema operativo que corresponde a ese archivo. Todo el espacio del búfer asociado con el archivo cerrado se libera.

Cuando se ejecuta la instrucción Close, la asociación de un archivo con su número de archivo termina.


Fuente: MSDN