Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   Dejar una marca en los archivos (https://www.clubdelphi.com/foros/showthread.php?t=83502)

fide_uci 24-06-2013 23:04:17

Dejar una marca en los archivos
 
Hola Amigos, saludos.

Necesito hacer una aplicacion a la cual por ejemplo, le arrastre un archivo o le seleccione un archivo (cualquier tipo de archivo ya sea video, audio, aplicacion, etc) y mi aplicacion escriba alguna marca en el, por ejemplo una cadena de texto, que luego mas adelante yo pueda recuperarla para saber si ese archivo fue marcado por mi o no.

Espero me entiendan y gracias de antemano.

ecfisa 25-06-2013 01:25:27

Hola fide_uci.

Almacenar en una tabla las rutas+nombres de archivo que se seleccionen es a mi criterio la mejor opción. Luego con una simple consulta podrás saber si un archivo ya ha sido seleccionado.

Apegandome a lo que solicitas, pero sin recomendartelo, podrías hacer:
Código Delphi [-]
...
implementation


const
   SIGNATURE = 'TU FIRMA';  

// Agregar firma
procedure TForm1.Mark(const aFileName: string);
var
  i: Integer;
begin
  with TFileStream.Create(aFileName, fmOpenReadWrite) do
  try
    Seek(0, soFromEnd);
    for i:= 0 to Length(SIGNATURE) do
      Write(SIGNATURE[i], 1);
  finally
    Free;
  end;
end;

// Verificar firma
function TForm1.isMarked(const aFileName: string): boolean;
var
  buf: char;
  str: string;
  i  : Integer;
begin
  with TFileStream.Create(aFileName, fmOpenRead) do
  try
    Seek(-Length(SIGNATURE), soFromEnd);
    for i:= 0 to length(SIGNATURE)-1 do
    begin
      Read(buf,1);
      str := str + buf;
    end;
  finally
    Free;
  end;
  Result := str = SIGNATURE;
end;

// Borrar firma
procedure TForm1.DeleteMark(const aFileName: string);
begin
  if isMarked(aFileName) then
    with TFileStream.Create(aFileName, fmOpenReadWrite) do
    try
      Size := Size - Length(SIGNATURE);
    finally
      Free;
    end;
end;
El único inconveniente que encontre de este modo es con los archivos de texto, ya que al abrirlos (vg.: bloc de notas), se visualiza la firma.

Saludos. :)

WkaymQ48 25-06-2013 10:38:21

Si los ficheros se van a guardar en NTFS y no los vas a enviar por internet puedes usar "Alternate Data Streams"

http://es.wikipedia.org/wiki/Alternate_Data_Streams

Si los ficheros los copias o mueves la información se copiara o moverá unida a ellos, pero si los copias a un disco fat o los envías por correo electrónico perderás esa información.

Un uso típico de los ADS es cuando bajas un fichero ejecutable de internet, el IE lo marca y de esa forma cuando lo intentas ejecutar te muestra una advertencia.

Neftali [Germán.Estévez] 25-06-2013 11:36:43

Cita:

Empezado por fide_uci (Mensaje 462718)
y mi aplicacion escriba alguna marca en el, por ejemplo una cadena de texto, que luego mas adelante yo pueda recuperarla para saber si ese archivo fue marcado por mi o no.

Si necesitas saber si un archivo fue arrastrado, es mejor que te apuntes la ruta, como te han comentado.
No veo factible que modifiques el contenido de un archivo, porque entre otras cosas puedes dejarlo inutilizable. No es trivial modificar un archivo de video, uno de imagen o uno con formato propietario.

fide_uci 26-06-2013 10:12:14

Muchas gracias a todos por sus respuestas. ecfisa gracias, esa esa la solucion que andaba buscando y verdaderamente no me interesa marcar archvos de texto. Neftali, no puedo utilizar una tabla y almacenar los nombres puesto que la idea es algo asi como que mantener un control de los archivos que he proporsionado yo mismo a ciertas personas y bueno esos archivos podrian viajar por cientos de computadoras y lo que ando buscando es la forma de saber si esos que andan x ahi son los que yo entregue a los clientes.

Saludos y cualquier cosa les comento a ver.


La franja horaria es GMT +2. Ahora son las 17:52:53.

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