type
String5 = String[5];
const
MAGIC : String5 = 'Magic';
MAGIC_SIZE = SizeOf(String5);
CLUSTER_SIZE = 4096;
FileName : array[0..12] of Char = 'TestFile.dat'#0;
var
hFile : THandle;
FileSize : DWord;
DW : DWord;
...
hFile := CreateFile(@FileName,GENERIC_READ or GENERIC_WRITE,0,NIL,OPEN_EXISTING,0,0);
FileSize := GetFileSize(hFile,NIL);
if (CLUSTER_SIZE - FileSize mod CLUSTER_SIZE) < MAGIC_SIZE then
begin
Write('"Хвост" файла слишком мал!');
CloseHandle(hFile);
Exit
end;
SetFilePointer(hFile,FileSize,NIL,FILE_BEGIN);
WriteFile(hFile,MAGIC,MAGIC_SIZE,DW,NIL);
SetFilePointer(hFile,FileSize,NIL,FILE_BEGIN);
SetEndOfFile(hFile);
CloseHandle(hFile)
Читаем 6 байт из "хвоста" файла и сравниваем их с MAGIC
var
TestString : String5;
...
hFile := CreateFile(@FileName,GENERIC_READ or GENERIC_WRITE,0,NIL,OPEN_EXISTING,0,0);
FileSize := GetFileSize(hFile,NIL);
if (CLUSTER_SIZE - FileSize mod CLUSTER_SIZE) < MAGIC_SIZE then
begin
Write('"Хвост" файла слишком мал!!');
CloseHandle(hFile);
Exit
end;
{ Читаем "хвост". }
SetFilePointer(hFile,FileSize+MAGIC_SIZE,NIL,FILE_BEGIN);
SetEndOfFile(hFile);
SetFilePointer(hFile,FileSize,NIL,FILE_BEGIN);
ReadFile(hFile,TestString,MAGIC_SIZE,DW,NIL);
{ Возвращаем файлу нормальную длину - усекаем файл. }
SetFilePointer(hFile,FileSize,NIL,FILE_BEGIN);
SetEndOfFile(hFile);
CloseHandle(hFile);
{ Проверяем TestString. }
if TestString <> MAGIC then
WriteLn('Tail <> MAGIC - ERROR!!!')
else
WriteLn('Tail = MAGIC - OK.');
Этот код не работает. Можно ли что-нибудь сделать, чтобы исправить ошибку???