https://foro.gambas-es.org/viewtopic.php?f=1&t=17&p=29#p29
-----------------------------------
soplo
Domingo, 13 Septiembre 2009, 21:12

Manejo De Ficheros
-----------------------------------
[color=darkred]Access[/color]
Saber si tenemos acceso a un fichero (bien  por que no exista, bien por permisos)
Acceso=access(path,modo)

El modo puede ser '
gb.read ====> lectu ra
gb.write ====> escritura
gb.exec ====> ejecu ción
Y además se pueden combinar
print access(system.home & "/mifichero",gb.write or gb.exec)

[color=darkred]Dir[/color]
Devuelve un array con los ficheros que cumplen la máscara especificada .
La máscara  puede ser
* ====> cualquiera
? ====> un caracter
[abc] ====> existe cualquier caracter especificado entre corchetes
[a-z] ====> cualquier caracter en el intervalo especificado
[^a- z] ====> cualquier caracter que no esté en el intervalo

[code linenumbers=false]Dim Fichero as  string
for each Fichero in dir(system.home, "*")
   print Fichero
next
[/code]

[color=darkred]Rdir[/color]
Igual que dir salvo que incluye subdirectorios.

[color=darkred]Exist[/color]
Devuelve true si el fichero o directorio existe

[code linenumbers=false]dim Fichero as  string
Fichero ="mifichero.txt "
if exist(Fichero) then
...
endif
[/code]

[color=darkred]Isdir[/color]
Devuelve true si el directorio especificado existe

[code linenumbers=false]print isdir(system.home) ==== > true
print isdir(system.home & "/fichero. txt") = ===> false
[/code]

[color=darkred]stat[/color]
Devuelve información  de u n fich ero o directorio.
La información  que se puede obtener es
Group ====> gru po al que perten ece
User ====> usu ario a l que pertenece
Hidden ====> oculto o no
LastAccess ====> último acceso
LastCha nge ====> último cambio
LastUpdate ====> última actu alización
Node ====> nodo actual
SetGid ====> gid actual
SetUid ====> uid actual
Size ====> tamaño en  bytes
Sticky ====> si está activado stickybit
Time ====> hora
Type ====> tipo de fichero

[code linenumbers=false]print stat("/home").type ==== > gb.directory
print round(stat("/home").size/1024)  & "K"  ====> tamaño en kb
[/code]

[color=darkred]Temp[/color]
Devuelve el nombre de un fichero temporal único y será creado en  /tmp

[code linenumbers=false]Dim ficheroaux  as string
Ficheroaux=temp()
[/code]

[color=darkred]Open[/color]
Abrir un  fichero en  uno de los siguientes modos
read ====> lectura
write ====> escritura
create ====> creación
append ====> añadir datos. El puntero se situa al final nada mas abrir
watch  ====>
direct ====> abrir sin  usar buffer. La  lectura/escritura es directa al fichero
big ====> usar BIG ENDIAN
little ====> usar LITTLE ENDIAN

[code linenumbers=false]Dim Descriptor as FILE
Descriptor=open "fichero"  for read/write/create/ .../  
[/code]

[color=darkred]Eof[/color]
Devuelve true si estamos al final de fichero
[code linenumbers=false]
open fichero for read  as Fich
do while not eof(Fich)
...
...
loop[/code]

[color=darkred]line input[/color]
Lee una línea. Se utiliza  como delimitador el salto de línea LF chr(10 ). Por esta razón NO DEBE USARSE con
ficheros binarios. Para  estos hay que usar READ.

[code linenumbers=false]Dim Linea as string
line input #Descriptor , Linea
[/code]

[color=darkred]Read / Write[/color]
Lee una cantidad de bytes de un  fichero y los almacena  en una variable. El tipo de esa variable define el tipo
de dato que se ha  leído.

[code linenumbers=false]read #descriptor,Variable,longitud[/code]
Si Variable es de tipo string y no se especifica  longitud se lee el string entero.
Si Variable es de tipo string y longitud es negativo se empieza a leer desde la derecha

[color=darkred]seek[/color]
Mueve el puntero X bytes hacia adelante. Si la  longitud es negativa lo mueve hacia  atrás.
seek #descriptor,posicion

[code linenumbers=false]seek #descriptor,0 ===  ir al  principio
seek #descriptor,lof(f ichero)  ====>  muevel  al final
seek #descriptor,-100  ====> mueve 10 0 bytes  hacia  atrás desde el  final de archivo
[/code]

[color=darkred]flush[/color]
Graba  el contenido del buffer al fichero. Usualmente se hace antes de cerrar un archivo tras haber hecho
cambios.
flush #descriptor

[color=darkred]close[/color]
Cierra un  fichero
[code linenumbers=false]close # descriptor[/code]

[color=darkred]copy[/color]
copia  un fichero no abierto a otro lugar No se pueden copiar directorios recursivamente.
copy path_origen to path destino

copy system.home &/ "f ichero. txt" to user.home &/ "fichero_renombrado. txt"

[color=darkred]kill[/color]
Borra  un fichero no abierto

kill "fichero"

[color=darkred]rename[/color]
Renombra  un fichero no abierto.

rename  "fichero" as "nuevonombre"

[color=darkred]mkdir[/color]
Crea  un directorio.

mkdir " Directorio"

[color=darkred]rmdir[/color]
Borra  un directorio

rmdir " Directorio"

[size=14][color=darkgreen]Un ejemplo[/color][/size]
Leer registros de una  tabla y dejarlos en un  fichero secuencial. Se entiende que ya  existe una conexión
activa a base de datos.

[code linenumbers=false]Dim Rec  as result, F as file
Rec=Conexion.exec("select nombre,direccion, telefono from clientes") 'abrir el recordset
F=open  "fichero.dat" for create
do while Rec.available
   print  #F,Rec!Nombre, Rec!direccion, Rec!telefono
   Rec.movenext
loop[/code]

Al escribir separando por coma los campos quedan separados por un tabulador.

[size=14][color=darkgreen]Otro ejemplo[/color][/size]
Insertar en  una  tabla datos procedentes de un fichero de datos. Se entiende una  conexión  activa a base de datos

[code linenumbers=false]Dim F as file,  Linea a sstring, Campos as  string[]
F=open  "fichero.dat" for read
while not eof( F)
   line  input  #F,Linea
   Campos=split(Linea, key.tab )
   Conexion.exec("insert into  tabla  (nombre ,direccion,telefono)  values ( '" & campos[0]  & "',' " & campos[1]  & "','"  & campos[2] &  ")")
wend[/code]


