Apúntate...


Consultas, desarrollo de programas y petición de presupuestos:

Mostrando entradas con la etiqueta ficheros. Mostrar todas las entradas
Mostrando entradas con la etiqueta ficheros. Mostrar todas las entradas

domingo, 31 de agosto de 2014

Arrastrar y Soltar ( drag and drop ) II : Arrastrar y soltar Ficheros desde el navegardor a tu aplicación

Arrastrar y Soltar ( drag and drop ) II :

Arrastrar y soltar  Ficheros desde el navegardor a tu aplicación


Una de las cosas más útiles y realmente prácticas es dar la posibilidad al usuario de que pueda arrastrar ficheros desde su navegador de archivos a la aplicación.

Vamos a describir dos ejemplo
1) Arrastrar un archivo en formato de texto plano (.txt) desde el navegador, y que lo mostremos en un textArea.
2) Arrastrar un archivo gráficos (extensión: png, jpg) y que nos lo muestre en un picturebox.


Pasos que tenemos que seguir:
1º.  En el control donde vamos a soltar el archivo, hay que poner en modo TRUE la propiedad "drop". Por dos razones: para que acepte soltar cosas sobre ella y que se active el evento _drop() al realizar la acción de soltar.
2º. Analizar la información del objeto "drag" y extraer la información que nos interese (la ruta del archivo)
3º. Una vez obtenida la ruta, procedemos a cargarla en el control.


Ejemplo de como se programa una aplicación para que podamos arrastrar y soltar ficheros desde el navegardor de archivos.

Código fuente:

-

-




Enlace de descarga: enlace a box.com

jueves, 31 de julio de 2014

Funciones para manejar ficheros y directorios

Ficheros y directorios:

Gambas3 contiene una serie de ordenes que nos van a ayudar a manejar archivos y directorios:

Entre ellas:

CHMOD : Cambia el permiso de un archivo, ejemplo: : Chmod "~/Documents" To "rwxr-x---"
COPY : Copia un archivo, ejemplo: COPY User.Home &/ ".config/gambas/gambas.conf" TO "/mnt/save/gambas.conf.save"
Exist : Comprueba si existe un fichero o directorio. Ejemplo: PRINT Exist(user.home & "/gambas.txt")

IsDir : Devuelve si es un directorio la ruta pasada

KILL : Borra un fichero

MKDIR: crea un directorio

MOVE : mueve o cambia de nombre un fichero. Ejemplo: MOVE OldName TO NewName

RMDIR : borra un directorio vacio

Stat : Obtienes información de un fichero:

Temp$ : crea un nombre temporal para un fichero.


Además la clase file, tiene una serie de métodos que devuelven parte del nombre de fichero:

.Name : nombre sin extensión
.Basename : nombre con extensión
.Ext: extensión del fichero
.Dir: directorio del fichero


Exemplo de uso de métodos de file:

Ejemplo de un boton llamado "ButtonDisplayPath", el cual al hacer click sobre el, despliega un cuadro de dialogo para elegir un fichero, y luego nos da los datos del fichero (ruta, nombre, extension)
PUBLIC SUB ButtonDisplayPath_Click()
  IF Dialog.OpenFile() THEN RETURN
  PRINT "Nombre completo del fichero: " & Dialog.Path
  PRINT "Nombre del fichero (con extension) " & File.Name(Dialog.Path)
  PRINT "Nombre del fichero (sin extension): " & File.BaseName(Dialog.Path)
  PRINT "Extension del fichero: " & File.Ext(Dialog.Path)
  PRINT "Directorio del fichero: " & File.Dir(Dialog.Path)
END


Ejemplo de función para copia recursiva de archivos y directorios:
Esta función recursiva, sirve para copiar todos los archivos y carpetas de una carpeta a otra. Tiene un parámetro opcional para seleccionar el tipo de ficheros que queremos copiar:

PUBLIC SUB copia_dir(path_origen AS String, path_destino AS String, OPTIONAL tipo as String)

 DIM arDir AS string[]
 DIM arFile AS string[]
 DIM nombredir, nombrefile AS String

 IF  NOT tipo then tipo="*"
 IF NOT Exist(path_destino) THEN
    MKDIR path_destino
 ENDIF
 arfile = Dir(path_origen, tipo, gb.file)  'extraemos los ficheros
 FOR EACH nombrefile IN arfile  'los copiamos
       COPY path_origen &/ nombrefile TO path_destino &/ nombrefile
 NEXT
 ardir = Dir(path_origen, "*", gb.Directory)
 FOR EACH nombredir IN arDir 'extraemos los subdirectorios
        copia_dir(path_origen &/ nombredir, path_destino &/ nombredir) 'usamos la recursividad
    NEXT
END




Para ampliar más la información:
http://gambaswiki.org/wiki/cat/file?w
http://gambaswiki.org/wiki/comp/gb/file?w
http://gambaswiki.org/wiki/comp/gb/stat


Fuente ejemplo de función recursiva de copia de archivos (autor Shordi)
http://www.gambas-es.org/viewtopic.php?f=5&t=1440&highlight=recursiva+archivos

viernes, 31 de agosto de 2012

Ficheros: Lectura y escritura de ficheros de texto

Para guardar y leer información de ficheros de texto en Gambas, se usa la orden File, en especial los métodos .load y .save

Para Leer datos de un fichero
File Load:
cadena_de_texto = File.Load(ruta)

Para guardar el contenido de una cadena en un nuevo fichero:
 File Save:
File.Save(ruta, cadena_de_texto)


Para más informacion:
http://gambaswiki.org/wiki/comp/gb/file/load?nh
http://gambaswiki.org/wiki/comp/gb/file/save?nh



Un ejemplo simple:

Public Sub Main()
Dim texto As String
Print "------------------"
Print "Ejemplo de uso de File"
Print "------------------"

texto = "Esto es un mensaje guardado"

Print "La informacion que guardo es: "
Print texto

File.Save(User.Home & "/prueba.txt", texto)

Print "texto guardado en "; User.home & "/prueba.txt"

Print "Ahora lo leo y muestro su contenido:"
texto = File.Load(User.home & "/prueba.txt")


Print "------------------"
Print "Contenido:"
Print texto
Print "------------------"


End



Enlace de descarga del código: enlace
Enlace de Descarga del ejecutable: enlace

Normalmente, la información que guardamos son array de cadenas. (o arrays de numeros que convertimos en cadenas). Nos va a ser muy útil el  metodo .join y la función split, como veremos en el siguiente ejemplo:


' Gambas module file


Public Sub Main()
Dim arr_cadena As String[]
Dim arr_copia As String[]
Dim a As Integer
Dim contenido As String
'añadimos al array de cadenas unos nombre...
arr_cadena = New String[]
arr_cadena.Add("Julio")
arr_cadena.Add("Juan")
arr_cadena.Add("Luis")
arr_cadena.Add("Marta")
arr_cadena.Add("Eva")


'los guardamos en una variable de cadena, para ello, los unimos con la funcion .join
contenido = arr_cadena.Join("|") 'usamos el caracter "|" , para separar los datos unos de otros


Print "Los datos los guardos en este formato:"
Print contenido


File.Save(User.home & "/lista.txt", contenido)
Print ""
Print ""
Print "Ahora leo los datos"
contenido = File.Load(User.home & "/lista.txt")


Print "Ahora, los divido usando la funcion split, para tenerlos otra vez en un array de cadenas"


arr_copia = New String[]
arr_copia = Split(contenido, "|")


'ya estan contenido en el array
'
'los muestros:
For a = 0 To arr_copia.Max
Print "array ("; a; ")="; arr_copia[a]
Next
Print "Fin del programa"


End


El resultado en la consola es:

Enlace de descarga del Código Fuente: Enlace
Enlace de descarga del ejecutable: Enlace


Nota:
user.home: nos indica el directorio del usuario

Otro ejemplo simple:
Vamos a generar una serie de valores integer aleatorios en un array , guardarlos en un archivo y luego leerlos y asignarlos a otro array y mostrarlo en la pantalla.


Public Sub Form_Open()

Dim a As Integer
Dim numeroaleatorio As Integer

'array donde estaran los numero integer
Dim arrayValores As New Integer[]
'array de conversion a cadena
Dim arrayCadena As New String[]
'cadena resultante: cadena que contiene todos los valores del array de integer,convertido en una unica cadena
Dim cadena As String
Dim cadenaLeida As String 'cadena para leer de un archivo

'creo los numeros que añado al array
Randomize

For a = 0 To 50
numeroaleatorio = Rnd(1, 6)
arrayValores.Add(Int(numeroaleatorio))
Next

For a = 0 To 10
arrayCadena.Add(Str$(arrayValores[a]))
Next

'uno todos los valores, separandoles con una barra vertical
cadena = arrayCadena.Join("|")

Print "La cadena de numero es: "; cadena

'y esta cadena es la que puedo guardar en el fichero de texto..
File.Save(User.home & "/MatrizPrueba.txt", cadena)

'borro los datos anteriores
arrayCadena.Clear
arrayValores.Clear

'para leerla...
cadenaLeida = File.Load(User.Home & "/MatrizPrueba.txt")

'paso los valores de la cadena a una array de cadena de caracteres
arrayCadena = Split(cadenaLeida, "|")

'Paso el contenido del array de cadena de caracteres a un array de integer
For a = 0 To arrayCadena.Max
arrayValores.Add(Val(arrayCadena[a]))
Next

'Escribo los valores del array de integer..
For a = 0 To arrayValores.Max
Print arrayValores[a]; " ";
Next

End


Enlace de descarga del código: enlace


Nota: 27/10/2014
Write Append
Algunas veces necesitamos añadir información al final de un archivo de texto. Existe un modo de abrir el archivo, que nos facilita esa labor, ahorrandonos leer todo el contenido del archivo.

Código de ejemplo:

DIM hFile as File
DIM path as String
path = "ruta/al/archivo.txt"
hFile = OPEN path FOR WRITE APPEND
PRINT #hFile, "Escribo mas texto al final\n"
PRINT #hFile, "Y mas y mas\n"
hFile.Close


Con el codigo anterior hemos leido el archivo "ruta/al/archivo.txt", y le hemos añadido al final los textos de "Escribo mas texto al final\n" y  "Y mas y mas\n"

fuente: http://www.gambas-es.org/viewtopic.php?f=1&t=633&start=0



A falta de donativos... un poco de publicidad