Ir al contenido



Foto

Crear archivos temporales con CreateFile()


  • Por favor identifícate para responder
4 respuestas en este tema

#1 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.398 mensajes
  • LocationRepública Dominicana

Escrito 12 septiembre 2018 - 01:15

Mi objetivo es crear un archivo temporal de uno existente y que se elimine cuando se cierre con CreateFile(), leí por ahí que con el atributo FILE_FLAG_DELETE_ON_CLOSE se puede lograr, pero la verdad no he conseguido algún ejemplo de uso, ¿Alguno de ustedes ha realizado algo parecido?.

 

Saludos.


  • 0

#2 escafandra

escafandra

    Advanced Member

  • Moderadores
  • PipPipPip
  • 3.789 mensajes
  • LocationMadrid - España

Escrito 12 septiembre 2018 - 01:46

Es como dices. Mira este ejemplo en el que al cerrar el archivo se borra automaticamente. Para ello la apertura no puede ser compartida pues si otro proceso lo tiene abierto no se podrá borrar.


delphi
  1. implementation
  2.  
  3. {$R *.dfm}
  4. var
  5. hFile: THANDLE;
  6.  
  7. procedure TForm1.Button1Click(Sender: TObject);
  8. begin
  9. // Crea un nuevo archivo temporal para lectura y escritura.
  10. hFile:= CreateFile('TempFile.dat', GENERIC_WRITE or GENERIC_READ, 0, nil, CREATE_ALWAYS, FILE_ATTRIBUTE_TEMPORARY or FILE_FLAG_DELETE_ON_CLOSE, 0);
  11. end;
  12.  
  13. procedure TForm1.Button2Click(Sender: TObject);
  14. begin
  15. // Cierra y borra el archivo
  16. CloseHandle(hFile);
  17. end;
  18.  
  19. end.

Saludos

 

 

 


  • 1

#3 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.398 mensajes
  • LocationRepública Dominicana

Escrito 12 septiembre 2018 - 01:53

Gracias escafandra, estoy algo confuso viendo el closeHandle de tú ejemplo, por ejemplo, si creo un archivo temporal de un documento word se abre, el usuario ve el contenido y cierra ese documento se elimina?, ó, es que se elimina cuando cierras la aplicación delphi?


  • 0

#4 escafandra

escafandra

    Advanced Member

  • Moderadores
  • PipPipPip
  • 3.789 mensajes
  • LocationMadrid - España

Escrito 12 septiembre 2018 - 03:38

No. El archivo temporal no puede ser abierto por otro proceso. En caso de que ya existiese, CreateFile con la opción FILE_FLAG_DELETE_ON_CLOSE fallará.
 
Para que después de que un usuario vea un archivo temporal con otra aplicación se borre el archivo que ha visto, debes detectar que la aplicación se cerró para borrarlo después. Esto fue motivo de esta pregunta:  Gestionar archivos temporales que se abren con terceros programas y de esa pregunta hice esta versión de RunAndWaitShell


Saludos.


  • 1

#5 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.398 mensajes
  • LocationRepública Dominicana

Escrito 17 septiembre 2018 - 11:59

Gracias escafandra y perdona la tardanza.

 

Saludos.


  • 0