esto es algo de lo que hago:
Código Delphi
[-]
procedure TID3Tag.ReadTag;
var
FTagRecord: ID3Struct;
F:File;
begin
AssignFile(F, FFileName);
Reset(F,1);
Seek(F,FileSize(F)-SizeOf(FTagRecord));
BlockRead(F, FTagRecord, SizeOf(FTagRecord));
CloseFile(F);
if StrLComp(FTagRecord.Magic, ID3Magic, SizeOf(FTagRecord.Magic))<>0 then
begin
FillChar(FTagRecord, SizeOf(FTagRecord), ' ');
StrLCopy(FTagRecord.Magic, ID3Magic, SizeOf(FTagRecord.Magic));
end;
with FTagRecord do
begin
FTitle := Trim(Copy(Title, 1, SizeOf(Title)));
FArtist := Trim(Copy(Artist, 1, SizeOf(Artist)));
FAlbum := Trim(Copy(Album, 1, SizeOf(Album)));
FYear := Trim(Copy(Year, 1, SizeOf(Album)));
FComment := Trim(Copy(Comment, 1, SizeOf(Comment)));
FGenre := ID3GenreName[Genre];
end;
Con respecto a que otra aplicacion lo use no es el problema, con AssignFile lo solucione, o sea por mas que otro usuario con otra aplicacion este usando el archivo (por ejemplo en un recurso compartido de red), mi aplicacion lo lee igual.
Ahora cuando el archivo tiene la propiedad "solo lectura" no lo puedo leer dese mi aplicacion.
Con respecto de hacer una copia no lo veo viable porque puede ser un archivo demasiado grande y tardaria demasiado en hacer la copia. Gracias