FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Saber si es DBF
Posts: 485
Joined: Fri Feb 09, 2007 10:34 AM
Saber si es DBF
Posted: Wed Jun 16, 2010 06:11 PM

Muy buenas foro, ¿hay alguna funcion que nos diga si un fichero es una base de datos DBF?

Un Saludo.

Posts: 593
Joined: Sat May 12, 2007 11:47 AM
Re: Saber si es DBF
Posted: Wed Jun 16, 2010 07:02 PM

Hola,

No conozco una función así pero creo que podrías crearla usando un try catch e intentando abrirla en modo compartido.

De este modo, si dá un error puedes "detectar" que no es una DBF y, en caso contrario la cierras sabiendo que SI es una DBF.

Saludos.

Rolando :D

Posts: 654
Joined: Mon May 29, 2006 03:14 PM
Re: Saber si es DBF
Posted: Wed Jun 16, 2010 07:07 PM
Tienes una sitio llamado filext.com donde esta la definicion de todos los ficheros que puedas imaginar.

Sobre DBF hay esta informacion http://filext.com/file-extension/DBF

Solo tienes que comprobar que el primer octeto sea 03 en hexadecimal (3 en decimal).

Ejemplo de un DBF mirado con un editor hexadecimal:
Code (fw): Select all Collapse
00000000    03 0A 06 10 01 00 00 00 62 04 44 01 00 00 00 00    ........b.D.....
00000010    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
00000020    41 56 49 53 4F 00 E7 14 58 D2 01 43 F0 B8 0D 3D    NOMBR...X..C...=
00000030    02 00 00 00 01 00 58 D2 FA B8 C0 21 E7 14 01 00    ......X....!....
00000040    44 41 54 41 42 4C 4F 43 4B 00 01 4E F0 B8 0D 3D    APELLIDO..N...=
00000050    09 00 00 00 01 00 58 D2 FA B8 C0 21 E7 14 01 00    ......X....!....
00000060    52 45 47 49 53 54 52 4F 00 00 01 4E F0 B8 0D 3D    CIUDAD.....N...=
00000070    09 00 00 00 01 00 58 D2 FA B8 C0 21 E7 14 01 00    ......X....!....
00000080    4D 45 4E 53 41 4A 45 00 00 00 01 4E F0 B8 0D 3D    PROFESI....N...=
00000090    09 00 00 00 01 00 58 D2 FA B8 C0 21 E7 14 01 00    ......X....!....
000000A0    43 41 54 00 41 4A 45 00 00 00 01 4E F0 B8 0D 3D    SUELDO....N...=
Mi abuelo decía: Los aviones vuelan porque Dios quiere, y los helicópteros ni Dios sabe porque vuelan.

FWH 16.02, xHarbour 1.2.3, Harbour 3.2.0, WorkShop 4.5, AJ Make 0.30, Borlan BCC 7.00, VisualStudio 2013
Posts: 601
Joined: Wed Jul 04, 2007 03:51 PM
Re: Saber si es DBF
Posted: Thu Jun 17, 2010 01:26 AM
Hola...
Prueba esto:

Code (fw): Select all Collapse
MsgInfo(cFileExt(  cArchivo )


Espero te sirva.
Ojeda Esteban Eduardo.

Buenos Aires - Argentina.

FWH - PellesC - DBF/CDX - ADS - Gloriosos .Bat - MySql - C# .net - FastReport

Skype: jreduojeda
Posts: 485
Joined: Fri Feb 09, 2007 10:34 AM
Re: Saber si es DBF
Posted: Thu Jun 17, 2010 05:50 PM

Muy buenas foro, he realizado una pequeña funcion para que nos diga si es una DBF o no.

function IsDBF(cFile)
local xAlias,lError:=.f.
try
use &(cFile) alias xAlias
lError:=.f.
catch
lError:=.t.
end catch

if !lError
    xAlias->(dbclosearea())
end if

return !lError

Un Saludo.

Posts: 485
Joined: Fri Feb 09, 2007 10:34 AM
Re: Saber si es DBF
Posted: Fri Jun 18, 2010 05:07 PM

Modificacion de la funcion para funcione en todos los casos:

function IsDBF(cFile)
local hFile,buffer,cText:=""
hFile:=fopen(cFile)
buffer:=SPACE(512)
fread(hFile,@buffer ,512)
cText:=str2hex(substr(buffer,1,1))
fclose(cFile)
if alltrim(cText)="03"
lOk:=.t.
else
lOk:=.f.
end if
return lOk

Un Saludo.

Continue the discussion