Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Compatibilidad de archivos (https://www.clubdelphi.com/foros/showthread.php?t=47383)

b3nshi 26-08-2007 16:25:52

Compatibilidad de archivos
 
Q tal todos? Sigo intentando entender la parte de archivos y bueno ahora mi pregunta es esta:

Si yo por ejemplo creo dos archivos, uno de byte y otro binario, es decir de un tipo de estructura definida por mi, puedo hacer esto?

Código Delphi [-]
lista = record
               Nombre: string[30];
               Descripcion: string[255];
               end;

var
archivo1 : FILE of lista;
archivo2 : FILE of byte;
 
begin
archivo1 := archivo2;
end;

Les explico el porq de querer hacer esto, no es para manejar la informacion contenida en los archivos, sino solo para abrirlo y crearlo al archivo, es decir quiero creo una funcion q vea si los archivos existen y si no los cree, pero el problema es q tengo muchos archivos de estructuras diferentes, entonces la idea es crear una funcion q me devuelva un FILE of byte, y bueno, de ahi seria asignarle el contenido a mi archivo con el q realmente quiero trabajar.

Se entiende la idea?

Muchas Gracias por su ayuda!

{Saludos}

cHackAll 26-08-2007 19:11:14

Amigo b3nshi, no entiendo muy bien el asunto, el "file of" type, solo sirve para una programación sencilla, es muy importante que entiendas que todos los archivos son binarios, el 100%. Lo que hace que un archivo sea entendido como de "texto" es que su contenido son letras y que está escrito en un lenguaje, el cual despues de cada oracion tiene un "CrLf" (Enter)

Por ejemplo, un archivo de texto con una únia linea que diga "'Hola amigo b3nshi" tendría la siguiente apariencia binaria:

Código:

$48,$6F,$6C,$61,$20,$61,$6D,$69,$67,$6F,$20,$62,$33,$6E,$73,$68,$69.$0D,$0A
Un archivo de texto unicode tiene caracteres que ocupan el doble de su tamaño normal, exadecimalmente estaríamos viendo:

Código:

$48,$00,$6F,$00,$6C,$00,$61,$00,$20,$00,$61,$00,$6D,$00,$69,$00,$67,$00,$6F,$00,$20,$00,$62,$00,$33,$00,$6E,$00,$73,$00,$68,$00,$69,$00.$0D,$00,$0A,$00
Al ver un archivo con el type lista que nombrabas y un registro estaríamos viendo algo como ésto:

Código:

$11,$48,$6F,$6C,$61,$20,$61,$6D,$69,$67,$6F,$20,$62,$33,$6E,$73,$68,$69.......
$2F,$45,$73,$74,$65,$20,$73,$65,$72,$ED,$61,$20,$6C,$61,$20,$73,$65,$67,$75....

Te muestro ésto para que comprendas que al final el Sistema Operativo maneja a los archivos de una sola forma (todos binarios), y con sentencias dedicadas. Delphi reduce el nivel de abstracción con archivos de un "tipo" definido por el programador.

Al grano, Si quieres comprobar la existencia de un archivo podrías utilizar la función "FileExists", Yo en lo personal utilizo la siguiente orden:

Código Delphi [-]
 if GetFileAttributes('c:\archivo.txt') = INVALID_HANDLE_VALUE then
  MessageBox(0, 'Archivo no existe', nil, 0);

Si quieres implementar la creación de un archivo vacío al no existir el mismo te aconsejo usar la siguiente orden:

Código Delphi [-]
 CloseHandle(CreateFile('c:\archivo.txt', 0, 0, nil, OPEN_ALWAYS, 0, 0));

Finalmente y esperando no haberte confundido te dejo una linea para que veas si te es útil en tu mismo ejemplo:

Código Delphi [-]
 TFileRec(Archivo1) :=  TFileRec(Archivo2);

Saludos

b3nshi 27-08-2007 01:16:54

A decir verdad no me confundiste para nada... es mas... muchisimas gracias por tu explicacion! Me dejaste claro todo, o por lo menos lo q queria saber, inclusive hasta me explicaste de mas! jaja muchisimas gracias en serio... muy claro y ademas me diste soluciones mejores... porq a decir verdad siempre q queria ver si un archivo existia lo hacia con un try except...

Muchisimas Gracias por tus respuesta... y si aparece alguna otra duda la estaré posteando nuevamente por aqui...

{Saludos}


La franja horaria es GMT +2. Ahora son las 14:00:03.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi