PDA

Ver la Versión Completa : Utilizacion archivo con api win32


lucila89
02-02-2011, 15:34:07
Quisiera saber como se utilizan las llamadas siguientes:

CreateFile
DeleteFile
CloseHandle
ReadFile
WriteFile

encontré un par de ejemplos en esta pagina pero quisiera saber si alguien me puede ayudar. el codigo para crear archivos, ¿seria el siguiente?

program hello;

{$APPTYPE CONSOLE}

uses windows;

var
F:integer;


begin

F:=CreateFile('D:\archivo.txt',generic_read, 0, nil, create_always, file_attribute_normal,0);

closehandle(F);


end.

El ReadFile y los demás ¿como serian ?

desde ya muchas gracias

ecfisa
03-02-2011, 07:05:19
Hola lucila89.

Te hice un ejemplo básico donde se utilizan las funciones que solicitas:

...
const
FILE_NAME = 'C:\PRUEBA.TXT';
var
Hnd: Integer;
stToRead, stToWrite: string;
NR,NW: LongWord;
begin
Hnd:= CreateFile(FILE_NAME, GENERIC_WRITE, FILE_SHARE_DELETE,
nil, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, 0);
if Hnd = INVALID_HANDLE_VALUE then
raise Exception.Create('Error creando archivo')
else
begin
Readfile(Hnd, stToRead, Length(stToRead), NR, nil); // leer
stToWrite:= 'PRUEBA_DE_ESCRITURA_CON_WINDOWS_API';
WriteFile(Hnd, stToWrite[1], Length(stToWrite), NW, nil);
CloseHandle(Hnd);
if MessageBox(Handle,'¿ BORRA EL ARCHIVO ?','',MB_ICONQUESTION + MB_YESNO) = IDYES then
Windows.DeleteFile(FILE_NAME)
end;
end;

Es sólo un código trivial que crea/abre, lee, escribe, cierra y borra. Si querés más detalles sobre el uso de las funciones,
te dejo los enlaces con la información: CreateFile Function (http://msdn.microsoft.com/en-us/library/aa363858%28v=vs.85%29.aspx), CloseHandle Function (http://msdn.microsoft.com/en-us/library/ms724211%28v=vs.85%29.aspx), DeleteFile Function (http://msdn.microsoft.com/en-us/library/aa363915%28v=vs.85%29.aspx), ReadFile Function (http://msdn.microsoft.com/en-us/library/aa365467%28v=vs.85%29.aspx), WriteFile Function (http://msdn.microsoft.com/en-us/library/aa365747%28v=vs.85%29.aspx)

Un saludo.

lucila89
03-02-2011, 12:59:58
muchas gracias ecfisa me sirvio mucho la información y el ejemplo :cool:, ahora mismo estoy leyendo un poquito mas en los enlaces que me pasaste

lucila89
03-02-2011, 14:26:47
tengo un problema para leer el archivo o no lo entendí bien, osea en el readFile del ejemplo usaste un string como salida, en el link vi que la salida seria el buffer.
por ejemplo este código no me anda.

program Mayuscula;
uses windows,sysutils;
var
archivo,archivo2: LPCTSTR;
entrada, salida: Integer;
stRead, stWrite:string;
NR, NW: LongWord;
begin
archivo:= 'D:\texto.txt';
archivo2:= 'D:\texto2.txt';
entrada:= CreateFile(archivo, GENERIC_READ + GENERIC_WRITE, FILE_SHARE_WRITE, NIL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
salida:= CreateFile(archivo2, GENERIC_READ + GENERIC_WRITE, FILE_SHARE_WRITE, NIL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
ReadFile(entrada, stRead, length(stRead), NR, NIL);
stWrite:= uPcase(stRead);
WriteFile(salida, stWrite[1], Length(stWrite), NW, NIL);
CloseHandle(entrada);
CloseHandle(salida);
end.


que esta mal en el codigo?

ecfisa
03-02-2011, 21:59:57
Hola lucila89.

Probá de esta forma:

...
const
FILE_NAME = 'C:\PRUEBA.TXT';
var
Hnd: Integer;
stToRead: shortString;
NR: LongWord;
begin
Hnd:= CreateFile(FILE_NAME, GENERIC_READ + GENERIC_WRITE,
FILE_SHARE_READ + FILE_SHARE_WRITE, 0,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
Readfile(Hnd, stToRead, SizeOf(stToRead), NR, nil);
CloseHandle(Hnd);
ShowMessage(stToRead);
end;


Un saludo.

lucila89
03-02-2011, 22:21:38
muchas gracias cariño, anduvo de diez y pude terminar mi programa.

ecfisa
03-02-2011, 22:38:45
Hola de nuevo lucila89.

Me alegra haberte servido de ayuda.

Un saludo.